尝试在Doctrine2中执行此操作:
...->createQuery('SELECT m.id, (m.status != 1) as verified...
但是这会引发错误 - 如果我取消括号,我会收到另一个错误。我如何实现这种m.status比较?
由于
答案 0 :(得分:5)
Doctrine 2不支持SELECT子句中的这些比较(至少不高达2.3,不确定2.4)。
您可以使用CASE表达式作为解决方法:
SELECT m.id, CASE WHEN m.status != 1 THEN 1 ELSE 0 END AS verified ...
或:
SELECT m.id, CASE WHEN m.status = 1 THEN 0 ELSE 1 END AS verified ...
如果你需要verified
来获得ORDER BY子句(或类似的东西),但在结果中实际上不需要它,你可以使用HIDDEN表达式:
SELECT m.id, CASE WHEN m.status = 1 THEN 0 ELSE 1 END AS HIDDEN verified ...
完全不同的解决方案是编写custom DQL function。
答案 1 :(得分:-1)
您可以使用此处提出的解决方案:Cumulative DQL with Doctrine
使用实体时,请记住添加选择将使查询为每个结果返回一个数组:
$res = $em->createQueryBuilder()
->from('BlogPost', 'p')
->select('p')
->addSelect('(2+3) AS dummy')
->getQuery()->getResult();
迭代$ res将返回一个数组:
foreach($res as $mixed){
echo get_class($mixed[0]); //$mixed[0] contains the BlogPost
echo $mixed['dummy']; //displays the dummy result (5)
}
答案 2 :(得分:-2)
检查一下:13.2.4. Using Expr* classes to create conditionals
使用Expression方法可以执行以下操作:
$qb = $this->entityManager->createQueryBuilder();
$query = $qb->select('m.id')
->from('Entities\MyEntity', 'm')
/*neq() is the "not equal" comparison function*/
->where($qb->expr()->neq('m.status', $someValue)),
->getQuery();