在 Eloquent 上使用 User::all()
和 User::get()
有什么区别?
在 Laravel API 上,它仅在 all()
上描述了 Eloquent\Model
。
也许 get()
描述于 Eloquent\Builder
。
原文由 David Rodrigues 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Eloquent 上使用 User::all()
和 User::get()
有什么区别?
在 Laravel API 上,它仅在 all()
上描述了 Eloquent\Model
。
也许 get()
描述于 Eloquent\Builder
。
原文由 David Rodrigues 发布,翻译遵循 CC BY-SA 4.0 许可协议
为了进一步阐明为什么这样做,这是因为 Model 类中有一个神奇的方法,它会接受任何未定义的静态调用,创建一个实例,然后为您调用实例上的方法。
您可以在此处的源代码中看到它: https ://github.com/laravel/framework/blob/5.6/src/Illuminate/Database/Eloquent/Model.php(第 1580 行)
Laracast 剧集中也对此进行了解释: https ://laracasts.com/series/advanced-eloquent/episodes/3(需要订阅)
当我第一次遇到这个并且找不到 get()
作为静态方法时,我也很困惑。但后来我想起了 Laracast 插曲,它帮助我把这些点联系起来。
原文由 Kenny 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.2k 阅读
1 回答1.2k 阅读
User::all()
和User::get()
将做完全相同的事情。all()
是Eloquent\Model
上的静态方法。它所做的只是创建一个新的查询对象并对其调用get()
。使用all()
,您根本无法修改执行的查询(除非您可以通过将列作为参数传递来选择要选择的列)。get()
是Eloquent\Builder
对象上的一个方法。如果您需要修改查询,例如添加 where 子句,则必须使用get()
。例如,User::where('name', 'David')->get();
。