Laravel 4:渴望加载

时间:2013-11-20 23:06:47

标签: orm laravel

我有一个名为UserWords的表,其中有一个word_id列,我想用它来从Words表中获取行,并将它们连接在一起就像连接一样。这样,每个人都会获得UserWordsWords行中的信息。我在UserWord

中定义了这样的关系
class UserWord extends Eloquent{
    public function word(){
        $this->belongsTo('Word');
    }

}

然后在那之后,我尝试将所有用户词和单词都这样:

$words = UserWord::with("word")->
                whereRaw("user_id = ".Auth::user()->id.
                " AND lang1 = '".$lang1.
                "' AND lang2 = '".$lang2."'")
                ->get();

如果我没有with(),这是有效的。那么,我做错了什么?或者我将不得不创建一个原始JOIN来获得我想要的东西?我以前从未做过关系,所以也许我在想这根本错误?无论哪种方式,请教我不仅仅是给出答案,如果可以的话!我阅读了文档,我认为它应该可行,但事实并非如此......我在这里问。

编辑: 我得到的错误是:

Call to a member function addEagerConstraints() on a non-object 

2 个答案:

答案 0 :(得分:12)

您的关系定义不正确,您必须返回belongsTo方法调用的结果。请尝试以下方法:

class UserWord extends Eloquent {
    public function word(){
        return $this->belongsTo('Word');
    }
}

答案 1 :(得分:0)

$words = UserWord::with('word')
    ->where('user_id', Auth::user()->id)
    ->where('lang1', $lang1)
    ->where('lang2', $lang2)
    ->get();