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

Eloquent中Model::query()->get()与Model::get()的区别及query()方法优势

在Eloquent中Model::get()与Model::query()->get()的区别及query()的优势

两者的核心区别

从最终执行结果和底层逻辑来看,Model::get() 和 Model::query()->get() 没有本质差异。因为 Model::get() 底层实际上就是先调用 query() 方法获取查询构造器实例,再调用该实例的 get() 方法来执行查询并返回结果集。

代码示例

直接调用静态get():

Model::get();

通过query()获取构造器后调用get():

Model::query()->get();

使用query()方法的优势

虽然两种写法效果一致,但query()在以下场景中能带来明显的便利性:

  • 提升代码可读性与直观性:当需要添加多个查询条件(如where、orderBy、with等)时,先调用query()可以明确表明后续操作是基于查询构造器进行的,让代码逻辑更清晰。例如:

    Model::query()
        ->where('status', '=', 1)
        ->orderBy('created_at', 'desc')
        ->with('relatedModel')
        ->get();
    
  • 避免静态方法冲突:如果你的Model类自定义了与查询构造器同名的静态方法(比如自定义了static get()方法),使用Model::query()->get()可以绕过自定义的静态方法,确保调用的是Eloquent查询构造器原生的get()方法。

  • 动态构建查询更灵活:在需要根据条件动态拼接查询语句的场景中,先获取查询构造器实例再逐步添加条件,代码会更易维护。例如:

    $query = Model::query();
    
    if ($filterStatus) {
        $query->where('status', $filterStatus);
    }
    
    if ($searchKeyword) {
        $query->where('title', 'like', "%{$searchKeyword}%");
    }
    
    $results = $query->get();
    
  • 保持代码风格一致性:在团队协作或复杂项目中,统一使用query()来初始化查询构造器,能让所有查询操作的风格保持一致,降低团队成员的理解成本。

内容的提问来源于stack exchange,提问作者AR-Shahin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:35:22