在Eloquent上使用User::all()和User::get()有什么区别?在Laravel API上,它只描述了Eloquent\Model上的all()。也许get()在Eloquent\Builder上描述。
User::all()
User::get()
Eloquent\Model
all()
get()
Eloquent\Builder
yquaqz181#
User::all()和User::get()本身将做完全相同的事情。然而,有一个关键的区别。all()是Eloquent\Model上的静态方法。它所做的就是创建一个新的查询对象并对其调用get()。使用all(),您根本无法修改所执行的查询(除非您可以通过将列作为参数传递来选择要选择的列)。get()是Eloquent\Builder对象上的一个方法。如果您需要修改查询,例如添加where子句,则必须使用get()。例如,User::where('name', 'David')->get();。
User::where('name', 'David')->get();
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事件,它帮助我连接了这些点。
vecaoik13#
get()用于添加查询,all()用于获取所有数据,不使用任何条件。all()的例子:
$query = Project::all();
get()的例子:
$query = Project::select('id', 'name')->where('name', '')->orderBy('id', 'desc')->get();
3条答案
按热度按时间yquaqz181#
User::all()
和User::get()
本身将做完全相同的事情。然而,有一个关键的区别。all()
是Eloquent\Model
上的静态方法。它所做的就是创建一个新的查询对象并对其调用get()
。使用all()
,您根本无法修改所执行的查询(除非您可以通过将列作为参数传递来选择要选择的列)。get()
是Eloquent\Builder
对象上的一个方法。如果您需要修改查询,例如添加where子句,则必须使用get()
。例如,User::where('name', 'David')->get();
。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事件,它帮助我连接了这些点。vecaoik13#
get()用于添加查询,all()用于获取所有数据,不使用任何条件。
all()的例子:
get()的例子: