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

2022-08-30 08:54:58

使用和雄辩有什么区别?User::all()User::get()

在 Laravel API 上,它只描述了 all() on 。
也许 get() 在 上描述。Eloquent\ModelEloquent\Builder


答案 1

User::all()并且会做同样的事情。User::get()

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

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


答案 2

为了进一步阐明为什么这有效,这是因为 Model 类中有一个神奇的方法,它将接受任何未定义的静态调用,创建一个实例,然后在实例上为您调用该方法。

你可以在这里的源代码中看到它:https://github.com/laravel/framework/blob/5.6/src/Illuminate/Database/Eloquent/Model.php(第1580行)

这一集《拉拉卡斯特》中也有解释:https://laracasts.com/series/advanced-eloquent/episodes/3(需要订阅)

当我第一次遇到这个时,我也感到困惑,并且找不到静态方法。但后来我想起了Laracast的那一集,它帮助我把这些点连接起来。get()


推荐