mgsmus Teşekkürler ancak tam olarak istediğim bu değil yani çözüm olmuyor.
Bu sorguya join ile ekleme yaparak çözdüm. Articles, blog_categories, users üzerinde gelen datayı arama yaptırmak ve aktif olan kayıtları almak istedim. Örnek 'yeni' diye bir veri araması yaptığımda hem articles, hem kategorilerde, hem de users da arama yapıyor. Eşleşme sağlandığında aynı anda hem user, hem kategori hem de article aktif olmalı. Herhangi biri aktif olmazsa ilgili kayıtlar gelmemeli.
join ekleyerek yaptım ancak belki daha mantıklı bir çözümü vardır.
$articles = Article::query()
->with(['category', 'user'])
->select('articles.*')
->leftJoin('blog_categories', 'blog_categories.id', '=', 'articles.blog_category_id')
->leftJoin('users', 'users.id', '=', 'articles.user_id')
->where(function ($query) use ($searchText, $locale) {
$query->where(function ($query) use ($searchText, $locale) {
$query
->where("articles.name->{$locale}", "LIKE", "%$searchText")
->orWhere("articles.slug->{$locale}", "LIKE", "%$searchText%")
->orWhere("articles.content->{$locale}", "LIKE", "%$searchText%");
})->active('articles')->active('users')->active('blog_categories');
})->orWhereHas('category', function ($query) use ($searchText, $locale) {
$query->active('articles')->active('users')->active('blog_categories')
->where("name->{$locale}", 'LIKE', '%' . $searchText . '%')
->orWhere("slug->{$locale}", "LIKE", "%" . $searchText . "%")
->orWhere("content->{$locale}", "LIKE", "%" . $searchText . "%");
})->orWhereHas('user', function ($query) use ($searchText) {
$query->active('articles')->active('users')->active('blog_categories')
->where('users.name', 'LIKE', "%$searchText%");
})
->orderByDesc('id')
->paginate(10)
->withQueryString();
Ayrıca bu yukarıda önerilen paket tam olarak ne tarz sorgularda, ne tarz senaryolarda kullanmak mantıklı olur.