You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中Model类直接调用pluck方法的来源问询

关于Laravel中Model::pluck()方法来源的解答

嘿,这个问题刚接触Laravel的时候确实容易懵,我当初也琢磨过一阵!让我给你拆解清楚:

  • 首先,你直接在Model类上调用静态方法pluck()的时候,并不是Model类本身有这个方法,而是Laravel的魔术方法在起作用。Laravel的Illuminate\Database\Eloquent\Model类里有个__callStatic魔术方法,当你调用一个Model上不存在的静态方法时,它会自动创建一个**查询构建器(Eloquent Builder)**实例,然后把这个方法转发给查询构建器来执行。

  • 真正的pluck()方法是定义在查询构建器里的,具体来说是Illuminate\Database\Query\Builder类(Eloquent Builder继承了这个类的所有方法)。这个方法会直接在数据库层面执行类似SELECT id FROM my_models的查询,然后把结果包装成Collection实例返回给你——这也是你能在Collection里找到pluck方法的原因,但要注意:这里Model静态调用的pluck是查询构建器的方法,和Collection的pluck是两个不同的东西(前者直接操作数据库查询,后者在内存里处理已获取的集合数据)。

  • 你可以把App\MyModel::pluck('id')理解成下面这段代码的简写:

    App\MyModel::query()->pluck('id');
    

    其中query()方法就是Model类提供的,用来获取查询构建器实例的方法。

如果你去翻Illuminate\Database\Eloquent\Model的源码,能找到__callStatic方法的实现,它内部就是调用了$this->newQuery()->$method(...$parameters),也就是创建新的查询构建器然后调用对应的方法~

内容的提问来源于stack exchange,提问作者Zibellon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:45:15