Doctrine

时间:2015-04-22 09:18:44

标签: mysql doctrine

Doctrine是否支持IF语句?我收到以下错误:

Expected known function, got 'IF'
使用IF执行此查询时

$qb->select("c.id, IF(c.type_id LIKE 9, c.name, c.lastname) as name")

在纯SQL中重写时,它工作正常。任何解决方法?

2 个答案:

答案 0 :(得分:12)

不支持原则中的if条,您可以将其转换为case when

IF(c.type_id LIKE 9, c.name, c.lastname) as name

case when c.type_id = 9 then c.name else c.lastname end as name

<强>更新 在评论中,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)

答案 1 :(得分:0)

  

注释:用于第2学说

在这种情况下,最好使用一些额外的功能(不要试图“规避”它们的功能)。例如。一个出色的解决方案是为Doctrine 2添加几乎所有必需的内容(盒子不支持)(DoctrineExtensions by beberlei)(github)。有了它,可以像在OP中一样直接使用IF语句:

(“ Symfony示例”)例如在您的config.xml中添加行:

orm:
    ..
    entity_managers:
            ....
            dql:
                ....
                string_functions:
                    IF: DoctrineExtensions\Query\Mysql\IfElse

然后您可以在任何地方使用它,例如:

 $qb->select("..IF(condition, true-state, false-state)...")