Laravel 4:渴望加载
Posted
技术标签:
【中文标题】Laravel 4:渴望加载【英文标题】:Laravel 4: Eager loading 【发布时间】:2013-11-20 23:06:47 【问题描述】:我有一个名为 UserWords
的表,其中有一个 word_id
列,我想用它从 Words 表中获取行,然后像连接一样将它们连接在一起。这样每个人都将获得来自UserWords
和Words
行的信息。我在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
【问题讨论】:
你得到什么错误? 已编辑以包含新信息。 【参考方案1】:你的关系定义不正确,你必须返回belongsTo
方法调用的结果。请尝试以下操作:
class UserWord extends Eloquent
public function word()
return $this->belongsTo('Word');
【讨论】:
哇,我是个白痴。谢谢。 :P 也只是出于好奇,我用 with()->where()->get() 还是 where()->with()->get() 有关系吗? 这些链接方法调用的顺序不应该影响结果,然后在调用 get 方法之前,不会组装查询。【参考方案2】:$words = UserWord::with('word')
->where('user_id', Auth::user()->id)
->where('lang1', $lang1)
->where('lang2', $lang2)
->get();
【讨论】:
所以如果我使用 with() 就不能使用 whereRaw 了吗? 我没有使用 where raw 但您的查询似乎不需要 raw。 我明白了,我试着改成你的样子,但还是不行。 “Word”模型是什么样的? @peaceman 刚刚帮了我,我就像个白痴一样忘了回来。以上是关于Laravel 4:渴望加载的主要内容,如果未能解决你的问题,请参考以下文章