与 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 加载缺失的关系的主要内容,如果未能解决你的问题,请参考以下文章

原创翻译 Ten Questions About the NBA's First All-Star Draft

解决方法:Keil提示错误信息error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.

解决方法:Keil提示错误信息error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.

If only it could be all the same like we first me

将 BeautifulSoup 4 的 `find_all` 与正则表达式一起使用时,如何访问正则表达式匹配捕获组?

sh 来自http://stackoverflow.com/questions/35965783/delete-all-lines-before-first-occurrence-of-specifi