Doctrine2中的索引提示

Ale*_*Ale 3 php mysql doctrine-orm

有没有办法暗示在Doctrine2中使用索引?等效于MySQL USE INDEX语法:

SELECT * FROM user u USE INDEX(my_super_index) ...
Run Code Online (Sandbox Code Playgroud)

Ale*_*Ale 5

我使用一个自定义的树行者找到了一个具有工作代码的要点:https : //gist.github.com/arnaud-lb/2704404

感谢作者!

但是,它不适用于使用与MySQL不同的语法的RDBMS。

更新:以前的代码不适用于FROM子句中具有多个表的查询。因此,这是上一个沃克的更新版本:

<?php

namespace __YOUR_NAMESPACE_;

use Doctrine\ORM\Query\SqlWalker;

class UseIndexWalker extends SqlWalker
{
    const HINT_USE_INDEX = 'UseIndexWalker.UseIndex';

    public function walkFromClause($fromClause)
    {
        $sql = parent::walkFromClause($fromClause);
        $index = $this->getQuery()->getHint(self::HINT_USE_INDEX);

        return preg_replace('/( INNER JOIN| LEFT JOIN|$)/', sprintf(' USE INDEX(%s)\1', $index), $sql, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)