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()
作为静态方法时,我也很困惑。但后来我想起了 Laracast 的那一集,它帮助我把这些点联系起来。
get() 用于添加查询,all() 用于获取所有数据,不使用任何条件。
all() 示例:
$query = Project::all();
get() 示例:
$query = Project::select('id', 'name')->where('name', '')->orderBy('id', 'desc')->get();
不定期副业成功案例分享