Eloquent \ Model :: get()和all()之间的区别

时间:2016-01-04 08:51:16

标签: php laravel laravel-5 eloquent

在Eloquent上使用User::all()User::get()有什么区别?

在Laravel API上,它仅在Eloquent\Model上描述了all()。在Eloquent\Builder上描述了get()

3 个答案:

答案 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();