我正在使用自定义FindBy过滤器,我希望将orderBy和orderDirection作为参数传递:
public function findByFilter($filter, $orderBy = null, $orderDirection = null)
{
...
return $this->getEntityManager()->createQuery(
'SELECT i FROM ' . $entityName . ' i ' .
'WHERE i.id LIKE :id'
. ($orderBy) ? ' ORDER BY i.' . $orderBy : ''
. ($orderDirection) ? ' ' . $orderDirection : ''
)
->setParameter('id', $filter)
->getResult()
;
}
我收到以下错误消息:
[语法错误]第0行,第1列:错误:预期SELECT,UPDATE或 删除,得到'ASC'
答案 0 :(得分:2)
试试这个:
return $this->getEntityManager()->createQuery(
'SELECT i FROM ' . $entityName . ' i ' .
'WHERE i.id LIKE :id '
. ($orderBy ? ' ORDER BY i.' . $orderBy : '')
. ($orderDirection ? ' ' . $orderDirection : '')
)
->setParameter('id', $filter)
->getResult()
;
}
你在... :id
之后错过了一个空格,完整的三元运算符必须在括号内。
还有一个orderBy方法:
public function findByFilter($filter, $orderBy = null, $orderDirection = null)
{
...
$query = $this->getEntityManager()->createQuery($entityName . ' i')
->where('i.id LIKE :id')
->setParameter('id', $filter);
if ($orderBy && $orderDirection) {
$query->orderBy('i.' . $orderBy . ' ' . $orderDirection);
}
return $query->getResult();
}
代码未经过测试但应以某种方式工作。更多信息:https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/EntityManager.php#L287和https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query.php
更新:很抱歉,我发现Query和queryBuilder之间当然存在细微差别。查询似乎缺少orderBy方法。