Eloquent使用索引(IndexRaw)不能正常使用join和has

时间:2017-10-04 17:09:11

标签: php mysql laravel-4 eloquent laravel-eloquent

我使用Eloquent查询构建器编写了一个非常大的查询,我想添加要使用的索引。 我不想使用DB重写查询,因为如果我做错了(这个查询是系统中许多查询的一部分),它会在应用程序中引起很多问题,并且它花费了很多时间(查询很大)< / p>

我简化查询只是为了显示问题:

$model = $this->model->setConnection($connection);
if(!is_null($forceIndex)) {
    $model = $model::IndexRaw('USE INDEX('.$forceIndex.')');
}
$model = $model->has('advertiser')
dd($model->toSql());

查询是:

select * from table USE INDEX(allowed_index, status_index) where (select count(*) from `advertisers` where `table USE INDEX(allowed_index, status_index)`.`advertiser_id` = `advertisers`.`id`) >= 1

正如您所见,构建器是愚蠢的,并将table USE INDEX(allowed_index, status_index)替换为表名。

感谢您的帮助!

仅供参考:如果重要的话,我在这里使用Laravel 4.2

1 个答案:

答案 0 :(得分:0)

我找到了解决方案

$model = $this->model->setConnection($connection);
if(!is_null($forceIndex)) {
    $model = $model->from(\DB::raw('table USE INDEX('.$forceIndex.')'));
}