Php Doctrine2中的索引暗示

Php Doctrine2中的索引暗示,php,mysql,doctrine-orm,Php,Mysql,Doctrine Orm,有没有办法提示在Doctrine2中使用索引?MySQL的等效使用索引语法: SELECT * FROM user u USE INDEX(my_super_index) ... 我发现了一个使用自定义树漫游器的工作代码要点: 感谢作者 但是,对于使用与MySQL不同语法的RDBMS,它将不起作用 更新:前面的代码不适用于FROM子句中包含多个表的查询。这是我之前walker的更新版本: <?php namespace __YOUR_NAMESPACE_; use Doctrine\

有没有办法提示在Doctrine2中使用索引?MySQL的等效使用索引语法:

SELECT * FROM user u USE INDEX(my_super_index) ...

我发现了一个使用自定义树漫游器的工作代码要点:

感谢作者

但是,对于使用与MySQL不同语法的RDBMS,它将不起作用

更新:前面的代码不适用于FROM子句中包含多个表的查询。这是我之前walker的更新版本:

<?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);
    }
}

请注意,当您在Symfony中的存储库中的查询上实现此功能时,必须为提示查询的值设置FDQN::Hint\u CUSTOM\u OUTPUT\u WALKER

<?php

namespace __YOUR_NAMESPACE_\Repository;

use Doctrine\ORM\Query;
use __YOUR_NAMESPACE_\UseIndexWalker;

class MyEntityRepository extends EntityRepository
{
    public function myFunction()
    {
        $query = $this->entityManager->createQueryBuilder()->select('my_field')->from('my_entity', 'my_entity')->getQuery();
        $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, UseIndexWalker::class);
        $query->setHint(UseIndexWalker::HINT_USE_INDEX, 'my_super_index');
    }
}