2017-10-04 4 views
0

Ich habe eine ziemlich große Abfrage geschrieben mit Eloquent Query Builder und ich möchte Indizes hinzufügen zu verwenden. Ich möchte die Abfrage nicht mit der DB neu schreiben, da es viele Probleme in der Anwendung verursachen kann, wenn ich etwas falsch gemacht habe (diese Abfrage ist Teil vieler Abfragen im System) und es kostet viel Zeit (Abfrage ist groß)Eloquent verwenden Index (IndexRaw) funktioniert nicht richtig mit Join und hat

vereinfachen ich Abfrage nur das Problem zeigen:

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

Frage ist:

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 

wie Sie Builder sehen i s dumm und ersetzt table USE INDEX(allowed_index, status_index) als Tabellenname.

Danke für jede Hilfe!

FYI: Ich verwende Laravel 4.2 hier, wenn es

Antwort

0

zählt, fand ich Lösung

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