Laravel — метод вызывающей модели вызывает неопределенный метод Illuminate \ Database \ Query \ Builder

У меня проблема с методом модели с параметрами. У меня 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. Почему у меня проблемы с передачей параметра в метод?

1

Решение

Вы должны использовать нетерпеливая загрузка, чтобы избежать проблемы запроса 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');
}
1

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

Других решений пока нет …

По вопросам рекламы [email protected]