Доктрина 1.2 Функция управления потоком «ЕСЛИ» - PullRequest
2 голосов
/ 14 марта 2012

Используя Doctrine 1.2.4, я не могу решить, используя «IF» инструкцию MySQL под Doctrine.

Я хочу сгенерировать этот код 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.

Есть ли способ использовать IF с Doctrine 1.x?

http://groups.google.com/group/doctrine-user/browse_thread/thread/3faa518645e32eda%23&usg=AFQjCNEuqznC25z1EAzF4NIcfln8VG_Brg В настоящее время это не поддерживается DQL.

Доступно ли расширение для IF сУчение 1?(например, DoctrineExtensions / lib / DoctrineExtensions / Query / Mysql / IfElse.php) https://github.com/beberlei/DoctrineExtensions/blob/master/lib/DoctrineExtensions/Query/Mysql/IfElse.php

Условный оператор IF в операторе PHP Doctrine 1.2 * не может использоваться.

1 Ответ

2 голосов
/ 04 мая 2012

Просто поставьте пробел между 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)

...