在Eloquent上使用User::all()
和User::get()
有什么区别?
在Laravel API上,它仅在Eloquent\Model
上描述了all()
。在Eloquent\Builder
上描述了get()
。
答案 0 :(得分:56)
User::all()
和User::get()
会做同样的事情。
all()
是Eloquent\Model
上的静态方法。它所做的只是创建一个新的查询对象并在其上调用get()
。使用all()
,您无法修改根本执行的查询(除非您可以通过将它们作为参数传递来选择要选择的列)。
get()
是Eloquent\Builder
对象上的一种方法。如果您需要修改查询,例如添加where子句,则必须使用get()
。例如,User::where('name', 'David')->get();
。
答案 1 :(得分:3)
为了进一步说明其工作原理,这是因为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)插曲,它帮助我联系了各个环节。
答案 2 :(得分:1)
get() 用于添加查询,all() 用于获取所有数据,不使用任何条件。
all() 示例:
$query = Project::all();
get() 示例:
$query = Project::select('id', 'name')->where('name', '')->orderBy('id', 'desc')->get();