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

Laravel:如何在Eloquent模型中使用FORCE INDEX强制索引?

用Eloquent模型实现FORCE INDEX查询的方法

当然可以实现你想要的链式调用写法!Laravel的Eloquent其实很灵活,下面给你两种实用的方案:

方案一:给模型添加查询作用域(推荐,优雅复用)

你可以在Order模型里定义一个自定义的查询作用域,这样就能像你期望的那样直接调用forceIndex()方法了:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    // ... 模型其他代码

    /**
     * 强制使用指定索引的查询作用域
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @param  string  $indexName
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeForceIndex($query, $indexName)
    {
        // 用$this->getTable()动态获取表名,避免硬编码
        return $query->fromRaw("{$this->getTable()} FORCE INDEX({$indexName})");
    }
}

之后你就可以完全按照你想要的方式调用了:

Order::forceIndex('order_type_index')->where('type', 1)->get();

提示:记得把order_type_index换成你实际的索引名称,避免笔误哦

方案二:直接使用查询构造器的fromRaw方法(临时场景适用)

如果只是偶尔需要用一次,不想修改模型的话,也可以直接通过query()方法结合fromRaw来实现:

Order::query()
    ->fromRaw('orders FORCE INDEX(order_type_index)')
    ->where('type', 1)
    ->get();

这两种方法最终生成的SQL都会和你手动写的SELECT * FROM orders FORCE INDEX(order_type_index) WHERE type = 1一致,完美满足需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:07:46