私はDoctrineのQueryBuilder APIに依存してDQL文を生成する次のコードを持っています。Doctrine QueryBuilderとconcatの問題
class PlayerRepository extends EntityRepository
{
public function findByPartialNameMatch($trainer, $fullName)
{
$qb = $this->createQueryBuilder('tp');
$qb->innerJoin('tp.player', 'p')
->where($qb->expr()->andX(
$qb->expr()->orX(
$qb->expr()->like(
$qb->expr()->concat('p.firstName', $qb->expr()->concat(' ', 'p.lastName')),
$qb->expr()->literal($fullName.'%')
),
$qb->expr()->like(
$qb->expr()->concat('p.lastName', $qb->expr()->concat(' ', 'p.firstName')),
$qb->expr()->literal($fullName.'%')
)
),
$qb->expr()->eq('tp.trainer', '?1')
)
)
->groupBy('p.id')
->orderBy('p.lastName', 'ASC')
->orderBy('p.firstName', 'ASC')
->setParameter(1, $trainer);
return $qb->getQuery()->getResult();
}
}
私はそれを実行し、Symfony2のは、次のエラーメッセージがスローされます。
at QueryException ::syntaxError ('line 0, col 123: Error: Expected StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression, got ','')
in D:\Work\vendor\doctrine\lib\Doctrine\ORM\Query\Parser.php at line 396 -+
at Parser ->syntaxError ('StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression')
in D:\Work\vendor\doctrine\lib\Doctrine\ORM\Query\Parser.php at line 2391 -+
at Parser ->StringPrimary()
in D:\Work\vendor\doctrine\lib\Doctrine\ORM\Query\AST\Functions\ConcatFunction.php at line 60 -+
at ConcatFunction ->parse (object(Parser))
in D:\Work\vendor\doctrine\lib\Doctrine\ORM\Query\Parser.php at line 2852 -
から:
[Syntax Error] line 0, col 123: Error: Expected StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression, got ','
スタックトレースを見ては、次のことを明らかにし上記のように、私はこの問題が何らかの形でconcatヘルパー関数に関係していることを理解しており、関数expec列挙された入力ですが、どういうわけか(?)はカンマ(、)を受け取りました。
上記のコードで何が問題になっていますか?検索に何時間も費やさなければ問題は解決されませんでした。
ありがとうございました!
実際にそれが働きました。 [Doctrineのドキュメント](http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/query-builder.html#the-expr-class)を参照してください。これは不正確です。 –