Doctrine 1.2控制流程功能“IF”

时间:2012-03-14 11:30:42

标签: php mysql doctrine doctrine-1.2

使用Doctrine 1.2.4, 我无法在Doctrine下使用“IF”MySQL指令解析。

我想生成这个SQL代码:

UPDATE mytable SET mytable.state = IF(mytable.state=0, 128, mytable.state)

但是使用:

$stmt_update = Doctrine_Query::create()
->update('Mytable mytable')
->set('mytable.state', 'IF(mytable.state=0, 128, mytable.state)')
->execute();

mysql服务器下的结果是: mytable.state = IF(mytable.state)

$stmt_update>getDql(); // 'UPDATE Mytable mytable SET mytable.state = IF(mytable.state=0, 128, mytable.state )'
$stmt_update->getSqlQuery(); // 'UPDATE mytable SET  mytable.state = IF(mytable.state)'

getSqlQuery()方法用于调用Mysql,但语句SQL不正确。

是一种在Doctrine 1.x中使用IF的方法吗?

http://groups.google.com/group/doctrine-user/browse_thread/thread/3faa518645e32eda%23&usg=AFQjCNEuqznC25z1EAzF4NIcfln8VG_Brg 目前DQL不支持此功能。

对于使用Doctrine 1的IF,是否可以使用扩展名? (比如DoctrineExtensions / lib / DoctrineExtensions / Query / Mysql / IfElse.php) https://github.com/beberlei/DoctrineExtensions/blob/master/lib/DoctrineExtensions/Query/Mysql/IfElse.php

Conditional IF statement in a PHP Doctrine 1.2 SET statement无法使用。

1 个答案:

答案 0 :(得分:2)

只需在IF(之间加上空格,我的版本是1.2.3:

$stmt_update = Doctrine_Query::create()
    ->update('Mytable mytable')
    ->set('mytable.state', 'IF (mytable.state=0, 128, mytable.state)');

echo $stmt_update->getSqlQuery();

我得到了:

UPDATE Mytable SET mytable.state = IF (mytable.state=0, 128, mytable.state)