Php Laravel-调用模型的方法抛出未定义的方法\Database\Query\Builder

Php Laravel-调用模型的方法抛出未定义的方法\Database\Query\Builder,php,laravel,eloquent,laravel-eloquent,Php,Laravel,Eloquent,Laravel Eloquent,我对模型的参数方法有一个问题。我有两页和内容的翻译。我想获得基于语言的内容翻译,所以我在页面模型中有以下方法: 然后我在PageController中找到了一个方法,可以根据语言获取页面: public function getPagesByLanguage($language) { $pages = Page::orderBy('position', 'asc')->get(); foreach ($pages as $page) { $page->

我对模型的参数方法有一个问题。我有两页和内容的翻译。我想获得基于语言的内容翻译,所以我在页面模型中有以下方法:

然后我在PageController中找到了一个方法,可以根据语言获取页面:

public function getPagesByLanguage($language)
{
    $pages = Page::orderBy('position', 'asc')->get();
    foreach ($pages as $page) {
        $page->contentTranslations($language);
    }
    $return $pages;
}
我以JSON格式返回结果,我使用Laravel作为api。但这种方法不起作用。这给我带来了一个错误:

调用undefined方法Illumb\Database\Query\Builder::contentTranslations

不久前,我想返回所有语言的contentTranslations,所以我在contentTranslations模型方法中没有参数,在调用$page->contentTranslations之后,一切都正常工作;在foreach循环中。为什么我在将参数传递到方法时遇到问题?

您应该使用:

同时将您的关系更改为:

public function contentTranslations() {
    return $this->hasMany('App\ContentTranslation');
}

太好了,它就像我预期的那样工作。。。但如果我现在只想从contentTranslations中选择一些列,该怎么办?我试着在$q之后添加->选择数组'slug',语言->在哪里。。。语句,但随后它在content\u translations数组中返回0项。你能帮我吗您可以这样做$q->where'language',$language->选择['page_id',slug',language'];请注意,始终必须添加外键才能使关系正常工作。
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');
}