0

doctrine query builder を使用してクエリを作成します。

$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select(array('u'))->from('Account', 'a');

-- problem here
$qb->where('lower_unaccent(u.email) LIKE :search');
$qb->setParameter('search', $search['search'] . '%');

これで問題なく動作しますが、検索パラメーターに lower_unaccent 関数も適用したいと思います。

クエリビルダーでこれを行う方法はありますか? 私がそうLOWER_UNACCENT(u.email) LIKE LOWER_UNACCENT(:search)すると、次のエラーが表示されるためです。

Error: Expected Doctrine\ORM\Query\Lexer::T_STRING, got 'LOWER_UNACCENT'

LOWER_UNACCENT を LOWER に変更しても、同じエラー メッセージが表示されます。

4

2 に答える 2

0

と を使用する必要が$qb->expr()->lower('u.email')あり$qb->expr()->lower(':search')ます。「LIKE」を作成するには、それらを引数として に渡します$qb->expr()->like()

アクセントのない方法はないようですが、これをカスタマイズする方法があるかもしれません。それがどうなったか教えてください。

編集:

lower() のコードを見ると、次のように任意の関数を使用できるようです。

new Expr\Func('LOWER', array($x));
于 2013-11-07T22:00:36.710 に答える
-1

デフォルトでは、それはできないと確信しています。
lower_unaccentは標準SQLではなく、私が見る限り、Doctrineではサポートされていません。

できることは、ユーザー定義関数を使用してDQLを拡張することです。これにより、必要な処理が実行されます。実装するのはそれほど難しくありません。ここにいくつかのドキュメントがあります:

http://docs.doctrine-project.org/en/2.0.x/cookbook/dql-user-defined-functions.html

http://docs.doctrine-project.org/en/2.0.x/reference/dql-doctrine-query-language.html#adding-your-own-functions-to-the-dql-language

于 2013-01-30T15:21:44.983 に答える