2012-01-23 50 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