У меня есть набор фильтров: name, email, role, project, subproject, date_from, date_to и т.п. Нужно сделать выборку из БД таким образом, чтобы все заполненные фильтры участвовали в фильтрации. Все усложняется еще и тем, что имя и дата находятся в таблице day_reports. Остальные же параметры лежат в связанной таблице elementary_reports. Как здесь лучше сделать выборку из таблицы? Желательно через eloquent. Код (Text): class DayReport extends Model { protected $guarded = []; protected $dates = ['created_at', 'updated_at','reportdate']; public function elementary() { return $this->hasMany('App\ElementaryReport', 'day_reports_id', 'id'); } Я понимаю, что нужно использовать конструкцию типа этой: Код (Text): DayReport::with('elementary') Пробовал сделать таким образом: Код (Text): $result = DayReport::select('username')->with('elementary') ->when(!empty($filters['name']) , function ($query) use($filters) { return $query->where('username', 'LIKE', '%'.$filters['name'].'%'); })->get(); Но как добавить еще один/несколько when для фильтрации по параметрам, которые лежат в таблице elementary_reports? Возможно ли это в принципе посредством eloquent?
Возможно. With - не к месту используешь. Тебе нужен join а не with, а если есть совпадающие имена полей, добавляй явное упоминание имени таблицы. Типа 'ementary_reports.hujnane' --- Добавлено --- Вообще лучше сначала поиграть с чистыми SQL запросами, а когда появится понимание целевого запроса, тогда только сформулировать то же самое средствами eloquent.