Symfony - 创建查询错误

时间:2014-12-03 10:08:43

标签: symfony doctrine-orm

我正在使用自定义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'

1 个答案:

答案 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#L287https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query.php

更新:很抱歉,我发现Query和queryBuilder之间当然存在细微差别。查询似乎缺少orderBy方法。