Eloquent: фильтр по hasMany
Originally published at О разработке для Android и гаджетах. Please leave any comments there.
Мысли в одну строку: есть модель, у которой может быть множество других моделей. Такая связь указывается с помощью метода hasMany
public function variant() { return $this -> hasMany("App\\Models\\Variant"); }
При этом, если вы не знали или знали, но забыли, связать объект Variant с парентом можно с помощью belongsTo
public function shedule(){ return $this -> belongsTo("App\\Models\\Shedule"); }
Так вот, возникла необходимость получить список shedules, и в них провести фильтрацию объектов variant. Странно, но пришлось немного покопаться как на laracast.com, так и на прочих stackoverflow. Разгадка оказалась проста, хотя пришлось перепробовать много разных вариантов.
$list = Shedule::where('company_id', $this -> company -> id) -> with(['variant' -> function ($query) use ($agencyId) { $query -> where('shedule_variants.agency_id', $agencyId); }]);
В этом случае в метод with надо передать массив данных с фильтрами.
Особый интерес у меня вызывает список sql запросов при рендеринге каждой страницы, но это уже другой вопрос.