Doctrine是否支持IF语句?我收到以下错误:
Expected known function, got 'IF'
Run Code Online (Sandbox Code Playgroud)
使用IF执行此查询时:
$qb->select("c.id, IF(c.type_id LIKE 9, c.name, c.lastname) as name")
Run Code Online (Sandbox Code Playgroud)
它在纯SQL中重写时工作正常.任何解决方法?
Abh*_*rty 13
是的if,不支持在教义陈述你可以将其转换为case when
IF(c.type_id LIKE 9, c.name, c.lastname) as name
Run Code Online (Sandbox Code Playgroud)
至
case when c.type_id = 9 then c.name else c.lastname end as name
Run Code Online (Sandbox Code Playgroud)
更新:
从评论中concat允许函数进入case-when
非常允许答案是肯定的.这是一个例子
mysql> select * from timesheets ;
+-----------+-------+----------+
| client_id | hours | category |
+-----------+-------+----------+
| 1 | 1.50 | onsite |
| 1 | 1.50 | onsite |
| 1 | 1.00 | remote |
| 2 | 1.50 | remote |
+-----------+-------+----------+
4 rows in set (0.00 sec)
mysql> select
case when category = 'onsite' then concat('ON',' ',hours) else hours
end as dd from timesheets ;
+---------+
| dd |
+---------+
| ON 1.50 |
| ON 1.50 |
| 1.00 |
| 1.50 |
+---------+
4 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
注:对于原则 2
认为在这种情况下最好使用一些额外的功能(而不是试图“规避”他们的功能)。例如, beberlei (github) 的 DoctrineExtensionsDoctrine 2是 添加几乎所有必需的(盒子不支持的)内容的优秀解决方案。有了它,就可以像OP的情况一样直接使用-语句:IF
(“Symfony-example”)例如在您的config.xml添加行中:
orm:
..
entity_managers:
....
dql:
....
string_functions:
IF: DoctrineExtensions\Query\Mysql\IfElse
Run Code Online (Sandbox Code Playgroud)
然后你可以在任何地方使用它,例如:
$qb->select("..IF(condition, true-state, false-state)...")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6945 次 |
| 最近记录: |