У меня проблема с методом модели с параметрами. У меня 2 Page
а также ContentTranslation
, я хочу получить ContentTranslation
на основе языка, поэтому у меня есть следующий метод в Page
модель:
public function contentTranslations($language) {
return $this->hasMany('App\ContentTranslation')->where('language', $language);
}
а потом у меня есть метод в PageController
для получения страниц на основе языка:
public function getPagesByLanguage($language)
{
$pages = Page::orderBy('position', 'asc')->get();
foreach ($pages as $page) {
$page->contentTranslations($language);
}
$return $pages;
}
Я возвращаю свои результаты в формате JSON (я использую Laravel в качестве API). Но этот подход не работает. Это выдает мне ошибку:
Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: contentTranslations ()
Некоторое время назад я хотел вернуться contentTranslations
для всех языков, поэтому у меня нет параметра в contentTranslations
метод модели и все работало нормально после вызова $page->contentTranslations;
в цикле foreach. Почему у меня проблемы с передачей параметра в метод?
Вы должны использовать нетерпеливая загрузка, чтобы избежать проблемы запроса N + 1:
public function getPagesByLanguage($language)
{
return Page::with(['contentTranslations' => function($q) use ($language) {
$q->where('language', $language);
}])
->orderBy('position', 'asc')
->get();
}
Также измените свое отношение к:
public function contentTranslations() {
return $this->hasMany('App\ContentTranslation');
}
Других решений пока нет …