Я работаю над проектом с немного сложной моделью, которая объединяет в своих отношениях, а также требует параметра. Все это работает очень хорошо, за исключением случаев, когда мне нужно с нетерпением загружать отношения, поскольку я не мог понять, есть ли способ передать ему параметр/переменную.Laravel 5 Eager Загрузка с параметрами
Контроллер
$template = Template::find($request->input('id'));
$this->output = $template->zones()->with('widgets_with_selected')->get();
Модель
public function widgets_with_selected($banner_id)
{
return $this->belongsToMany('App\Models\Widget', 'zone_has_widgets')
->leftJoin('banner_has_widgets', function($join) use($banner_id) {
$join->on('widgets.id', '=', 'banner_has_widgets.widget_id')
->where('banner_has_widgets.banner_id', '=', $banner_id);
})
->select('widgets.*', 'banner_has_widgets.banner_id');
}
Это возвращает ошибку в Отсутствует аргумент как переменная не передается.
Я решил проблему, переместив логику на контроллер, но я хочу знать, есть ли способ сохранить отношения в модели и просто вызвать ее с помощью параметра.
Мне нравится ваше мышление. К сожалению, отношения находятся в модели зон, поэтому ничего из этого не получается:/ –
Ах да, вы правы. Я думаю, что это просто невозможно, не сохранив banner_id где-нибудь. Если не модель, то возможно Cache :: использование драйвера массива. Неважно, где вы его храните, это некрасиво. –