在select for Doctrine2中使用比较作为别名

cyb*_*bat 4 mysql doctrine doctrine-orm

试着在Doctrine2中这样做:

...->createQuery('SELECT m.id, (m.status != 1) as verified...
Run Code Online (Sandbox Code Playgroud)

但是这会引发错误 - 如果我取消括号,我会得到另一个错误.我如何实现这种m.status比较?

谢谢

Jas*_*wer 5

在SELECT子句中,Doctrine 2不支持这些比较(至少不高达2.3,不确定2.4).

您可以使用CASE表达式作为变通方法:

SELECT m.id, CASE WHEN m.status != 1 THEN 1 ELSE 0 END AS verified ...
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT m.id, CASE WHEN m.status = 1 THEN 0 ELSE 1 END AS verified ...
Run Code Online (Sandbox Code Playgroud)

如果您需要verifiedORDER BY子句(或类似的东西),但在结果中实际上不需要它,您可以使用HIDDEN表达式:

SELECT m.id, CASE WHEN m.status = 1 THEN 0 ELSE 1 END AS HIDDEN verified ...
Run Code Online (Sandbox Code Playgroud)

一个完全不同的解决方案是编写自定义DQL函数.