与 first()/all() 链接时,Laravel Eager 加载缺失的关系
Posted
技术标签:
【中文标题】与 first()/all() 链接时,Laravel Eager 加载缺失的关系【英文标题】:Laravel Eager Loading missing relationships when chained with first()/all() 【发布时间】:2012-12-16 05:26:48 【问题描述】:使用 L3 可以正常工作:
$r = Site::with('services')->get()
这完全符合我的预期。一组Site
对象,services 关系都整齐地填充。
但是,如果我只使用以下内容:
$r = Site::with('services')->first()
或
$r = Site::with('services')->all()
站点对象的关系完全为空。
这对我来说感觉像是一个错误,但我正在尝试做的事情有什么不对吗?目前要获得与使用first()
代替get()
相同的效果,我必须从返回的数组中提取第一个元素。
【问题讨论】:
【参考方案1】:首先,使用->first()
应该可以正常工作。再试一次,我有,它有效。如果它不适合您,请检查您的版本。我的是 3.2.10。
->all()
不应该那样工作,它只是一个简单的快捷方式。 docs say 要检索整个表,请使用 static all
方法。请注意,它是一个静态方法,您在对象上下文中使用它。不过不管怎样,你可以忘记这个并使用->get()
,这有什么问题?
如果你查看源代码laravel/database/eloquent/model.php
,你会看到:
public static function all()
return with(new static)->query()->get();
如您所见,此函数只是创建一个新的Model
,然后检索所有行。
【讨论】:
以上是关于与 first()/all() 链接时,Laravel Eager 加载缺失的关系的主要内容,如果未能解决你的问题,请参考以下文章