mysql - 案例在 Doctrine 查询生成器 where 子句中不起作用

标签 mysql symfony doctrine-orm doctrine symfony-2.8

我在where子句中遇到mysql CASE问题,

 $rides_q1 = $em->getRepository('IRRideBundle:Ride');
    $query = $rides_q1->createQueryBuilder('a')
                     ->where('(CASE WHEN a.ephemeral = 1 THEN a.date_beginning < NOW() AND a.date_ending > NOW()ELSE a.ephemeral = 0 END) AND a.active = 1 AND a.status = 5')                  
     ->getQuery();
$ridesQuery = $query->execute();



**[Syntax Error] line 0, col 93: Error: Expected Doctrine\ORM\Query\Lexer::T_ELSE, got '<'**

[2/2] QueryException: [Syntax Error] line 0, col 93: Error: Expected Doctrine\ORM\Query\Lexer::T_ELSE, got '<'   +
[1/2] QueryException: SELECT a FROM IR\RideBundle\Entity\Ride a WHERE (CASE WHEN ephemeral = 1 THEN date_beginning < NOW() AND date_ending > NOW()ELSE ephemeral = 0 END) 

我想准备这个sql查询,它与phpmyadmin一起工作正常

SELECT * FROM ride WHERE (CASE WHEN ephemeral = 1 THEN date_beginning < NOW() AND date_ending > NOW()ELSE ephemeral = 0 END) AND active = 1 AND `status_id` = 5 ORDER BY `date_ending` DESC

最佳答案

WHERE 中的 CASE 表达式是错误的。您可以将其转换为正常的复合条件,例如

(CASE WHEN a.ephemeral = 1 THEN a.date_beginning < NOW() AND a.date_ending > NOW()ELSE a.ephemeral = 0 END)

SELECT * FROM ride
WHERE ((a.ephemeral = 1 
       and a.date_beginning < NOW() 
       AND a.date_ending > NOW()) 
  OR a.ephemeral = 0)
  AND a.active = 1 
  AND a.status = 5
ORDER BY `date_ending` DESC

关于mysql - 案例在 Doctrine 查询生成器 where 子句中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43890433/

相关文章:

doctrine-orm - 原则 2 - 在数据库中插入新项目

mysql - 如何将当前周过滤为日期范围

php - 主义Mysql : multiple joins in query builder

php - __DIR__ VS 使用反射

php - Symfony2 + Doctrine INSERT 查询失败且没有错误

Mysql Doctrine2外键失败

php - 使用mysql数据显示JPGraph

PHP PDO 表和单独的按钮

php - 使用php在数据库mysql中上传图像

php - 单元测试 Symfony Messenger