我的模型方法带参数有问题。我有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
模型方法中没有参数,在foreach循环中调用$page->contentTranslations;
后一切正常。为什么我把参数传递给方法会遇到麻烦?
答案 0 :(得分:1)
您应该使用eager loading to avoid N+1 query problem:
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');
}