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

f8rj6qna  于 2023-09-29  发布在  PHP
关注(0)|答案(3)|浏览(128)

在Eloquent上使用User::all()User::get()有什么区别?
在Laravel API上,它只描述了Eloquent\Model上的all()
也许get()Eloquent\Builder上描述。

yquaqz18

yquaqz181#

User::all()User::get()本身将做完全相同的事情。然而,有一个关键的区别。
all()Eloquent\Model上的静态方法。它所做的就是创建一个新的查询对象并对其调用get()。使用all(),您根本无法修改所执行的查询(除非您可以通过将列作为参数传递来选择要选择的列)。
get()Eloquent\Builder对象上的一个方法。如果您需要修改查询,例如添加where子句,则必须使用get()。例如,User::where('name', 'David')->get();

vom3gejh

vom3gejh2#

为了进一步阐明为什么这样做,这是因为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事件,它帮助我连接了这些点。

vecaoik1

vecaoik13#

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

$query = Project::all();

get()的例子:

$query = Project::select('id', 'name')->where('name', '')->orderBy('id', 'desc')->get();

相关问题