EloquentModel::get()和all()之间的区别


Difference between EloquentModel::get() and all()

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

在Laravel API上,它只描述了Eloquent'Model上的all()
也许get()是在Eloquent'Builder上描述的。

User::all()User::get()将执行完全相同的操作。

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

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

为了进一步阐明为什么这样做,这是因为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()作为一个静态方法时,我也很困惑。但后来我想起了拉拉卡斯特的一集,它帮助我把这些点联系起来。

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

all()示例:

$query = Project::all();

get()示例:

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