Bu durumda;
1: ->with yerine with ->withWhereHas ile ilişkiyi zorlayın, çünkü bazı durumlarda with eager load etmiyor gibi görünebilir, özellikle orWhere zincirlerinde:
$foos = Foo::query()
->withWhereHas('tags', function ($q) {
$q->select('id', 'name');
})
->where(function (Builder $q) use ($search) {
$q->where('name', 'ILIKE', "%{$search}%")
->orWhere('description', 'ILIKE', "%{$search}%")
->orWhere('code', 'ILIKE', "%{$search}%");
})
->paginate(20);
2: where ve orwhere kullandığınız zaman koşullar ezilebileceğinde subquery kullanın.
$foos = Foo::query()
->with('tags')
->where(function (Builder $q) use ($search) {
$q->whereIn('id', function ($sub) use ($search) {
$sub->select('id')
->from('foos')
->where('name', 'ILIKE', "%{$search}%")
->orWhere('description', 'ILIKE', "%{$search}%")
->orWhere('code', 'ILIKE', "%{$search}%");
});
})
->paginate(20);
Böylece eager loading with('tags') kaybolmaz ve prod ortamında da stabil çalışır.
Kodları hızlıca yazdım, test etmedim.