Laravel Eager Load с динамическими ограничениями

Может кто-нибудь, пожалуйста, помогите мне понять, почему работает следующий код

$x = $widget->objGallery->galleryItems()->with(array('captions' => function($query){ $query->where('locale', 'IT' );}))->get() ;

но когда я использую динамическое значение

$id='11';
$x = $widget->objGallery->galleryItems()->with(array('captions' => function($query){ $query->where('locale', $id );}))->get() ;

говорит

Метод Illuminate \ View \ View :: __ toString () не должен вызывать исключение

1

Решение

На самом деле это трудно сказать, потому что вы не показали здесь соответствующий код, но проблема с кодом:

$x = $widget->objGallery->galleryItems()->with(array('captions' =>
function($query){ $query->where('locale', $id );
}))->get();

эта переменная $id здесь не определено Вам нужно добавить use использовать, если в замыкании, поэтому код должен выглядеть следующим образом:

$x = $widget->objGallery->galleryItems()->with(array('captions' =>
function($query) use($id) { $query->where('locale', $id );
}))->get();

Вы должны изменить свою среду на локальную и включить отладку, возможно, вы бы знали об этой проблеме. Вероятно, при исправлении этого кода, как я показал, у вас не будет ошибки.

9

Другие решения

Вы не можете, если вы хотите запросить отношения, вам нужно использовать whereHas.

Это, для концепции активной загрузки, просто уточнить … С исправлением синтаксиса в ответе @Marcin Nabiałek, где функция «with» работает только с данными о быстрой загрузке, а не с основным запросом.

0