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

Dav*_*ues 37 php laravel eloquent laravel-5

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

在Laravel API上,它仅描述all()Eloquent\Model.
也许get()是描述Eloquent\Builder.

pat*_*cus 68

User::all()User::get()会做同样的事情.

all()是一个静态的方法Eloquent\Model.它所做的就是创建一个新的查询对象并对其进行调用get().使用时all(),您根本无法修改执行的查询(除非您可以通过将它们作为参数传递来选择要选择的列).

get()Eloquent\Builder对象的方法.如果需要修改查询,例如添加where子句,则必须使用get().例如,User::where('name', 'David')->get();.


Hed*_*ary 8

get() 用于添加查询,all() 用于获取所有数据,不使用任何条件。

all() 的示例:

$query = Project::all();
Run Code Online (Sandbox Code Playgroud)

get() 的示例:

$query = Project::select('id', 'name')->where('name', '')->orderBy('id', 'desc')->get();
Run Code Online (Sandbox Code Playgroud)


Ken*_*nny 6

为了进一步阐明其工作原理,这是因为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)插曲,它帮助我联系了各个环节。