2

LIKE 式を使用して Doctrine クエリを作成する際に問題があります。

クエリ:

$dql    = "SELECT u FROM Users u JOIN u.group g WHERE g.name LIKE lower('ADMIN')";
$query  = $em->createQuery($dql);
$result = $query->getResult();

エラー:

QueryException: [Syntax Error] line 0, col 147: Error: Expected Doctrine\ORM\Query\Lexer::T_STRING, got 'lower'

LOWER は単なる例でした。LIKE EXPRESSION で他の関数を使用する必要があります。たとえば、unnacent...

両側で関数をサポートするように Like Expression を変更するにはどうすればよいですか?

例:LOWER(unaccent(u.login)) LIKE LOWER(unaccent('ADMIN'))

4

2 に答える 2

3

like 文字列には % 記号が必要です。ADMIN で始まるものが必要な場合は ADMIN% と記述し、ADMIN で終わるものが必要な場合は %ADMIN と記述し、最後に ADMIN を含めたい場合は %ADMIN% と記述します。

文字列を返すには、doctrine の CONCAT 関数を使用するか、PHP 経由で行うことができます。

于 2012-11-08T07:13:12.637 に答える
0

これを QueryBuilder でテストしましたが、解決策はないようです。2 番目のパラメーターは関数を使用しないため、パラメーターを切り替えることをお勧めします。

$dql    = "SELECT u FROM Users u JOIN u.group g WHERE UPPER(g.name) LIKE 'ADMIN'";
于 2012-07-20T15:19:41.510 に答える