Laravel 4:急切加载

3

我有一个名为UserWords的表,其中包含一个word_id列,我想使用它从Words表中获取行,并将它们连接在一起,就像连接操作一样。这样每个单词都会有来自UserWordsWords的信息。我在UserWord中定义了如下关系:

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

}

然后,我尝试获取所有的UserWords和Words,方法如下:
$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 

你得到了什么错误? - peaceman
编辑以包含新信息。 - samuraiseoul
2个回答

12

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

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

哇,我真是个白痴。谢谢 :P 另外出于好奇,使用 with()->where()->get() 还是 where()->with()->get() 有影响吗? - samuraiseoul
这些链接方法的顺序不应影响结果,直到调用get方法之前,查询才会被组装。 - peaceman

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

如果我使用with(),那么我不能使用whereRaw吗? - samuraiseoul
我没有使用 where raw,但是您的查询似乎不需要原始语句。 - Christopher Raymond
我明白了,我尝试按照你的方式进行更改,但仍然不行。 - samuraiseoul
“Word”模型是什么样子的? - Christopher Raymond
@peaceman 刚刚帮了我,我像个白痴一样忘记了返回。 - samuraiseoul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接