我编写了以下自定义 walker 来使用 postgres 的 ilike 而不是 like:
use Doctrine\ORM\Query\SqlWalker;
class IlikeWalker extends SqlWalker
{
/**
* Walks down a SelectClause AST node, thereby generating the desired SQL.
*
* @param $selectClause
* @return string The SQL.
*/
public function walkLikeExpression($likeExpr)
{
$sql = parent::walkLikeExpression($likeExpr);
$sql = str_replace('LIKE', 'ILIKE', $sql);
return $sql;
}
}
可以通过以下方式将其添加到任何查询中:
$query->setHint( $query::HINT_CUSTOM_OUTPUT_WALKER
,'\DoctrineExtensions\WalkerBundle\Walker\IlikeWalker' );
但是如何启动服务或应用配置以自动将其用于每个查询?