2012-01-23 45 views
1

我必须使用case statements到我查询生成器 ...Symfony2 + Doctrine + case语句:如何在DQL或其他语句中执行case语句?

我的查询是这样的:

 $query = $this->getEntityManager('V')->createQuery(
      'SELECT V, 
       (CASE unit WHEN "DAY"  THEN DATE_ADD(NOW() , INTERVAL start_date DAY) 
          WHEN "MONTH" THEN DATE_ADD(NOW() , INTERVAL start_date MONTH) 
          WHEN "YEAR"  THEN DATE_ADD(NOW() , INTERVAL start_date YEAR) 
       END as startDate 
       ) 
      FROM AppMyBundle:Entity V 

      WHERE 1=1 
      ORDER BY date ASC' 
     ); 

请注意,这是在MySQL正确。

我不知道如何解决它...

如果您有其他的想法,随时帮我:)

任何想法?

+2

你应该使用NativeQuery和ResultSetMapping http://www.doctrine-project.org/docs/orm/2.1 /en/reference/native-sql.html – solarc

+0

谢谢我发现另一个解决方案使用容器服务使用真正的mysql查询。我尝试你的解决方案,我会给出一个反馈... – Sam

回答

0
$query = $this->getDoctrine()->getEntityManager()->getConnection()->prepare(
     "SELECT V.id, 
      (CASE WHEN "DAY"  THEN DATE_ADD(NOW() , INTERVAL start_date DAY) 
        WHEN "MONTH" THEN DATE_ADD(NOW() , INTERVAL start_date MONTH) 
        WHEN "YEAR"  THEN DATE_ADD(NOW() , INTERVAL start_date YEAR) 
      END as startDate 
      ) 
     FROM table_name V 

     WHERE V.id = :id 
     ORDER BY date ASC" 
    ); 
$query->bindValue('id', $id); 
$query->execute(); 
$results = $query->fetchAll(); 

试试这一个,我希望它为你工作 谢谢, 阿肖克Chitroda