Company::with([
'departaments' => function (HasMany $q) {
$q->whereHas('workers', function (Builder $builder) {
$builder->where('email', 'like', "%{$this->searchTerm}%");
//остальные фильтры по workers
});
},
])->whereHas('departaments.workers', function (Builder $builder) {
$builder->where('email', 'like', "%{$this->searchTerm}%");
//остальные фильтры по workers
})->get();
Думаю что-то такое, но на работоспособность не проверял.
Смысл в том чтобы "жадно" загрузить только те департаменты, какие нужно. Для этого юзаем with(), в который передаём callback под ключом departaments
Дока:
https://laravel.com/docs/9.x/eloquent-relationship...