【发布时间】:2012-05-22 04:30:56
【问题描述】:
我有以下代码,它依赖于 Doctrine 的 QueryBuilder API 来生成 DQL 语句。
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 会抛出以下错误消息:
[Syntax Error] line 0, col 123: Error: Expected StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression, got ','
查看堆栈跟踪,显示以下内容:
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 -
从上面我了解到,这个问题在某种程度上与 concat 辅助函数有关,并且该函数需要枚举输入,但不知何故(?)收到了一个逗号(,)。
上面的代码有什么问题?数小时的搜索无法找出问题所在。
感谢您的帮助!
【问题讨论】:
-
非常感谢,这是我的代码:` $orX ->add( $this->qb->expr()->like( $this->qb->expr()->concat ( "{$alias}.{$name}", $this->qb->expr()->concat($this->qb->expr()->literal(' '), "{$alias} .{$lastname}" )), ":v0" ) ) `
标签: php symfony doctrine-orm