2012-04-30 60 views
0

我在Symfony2中創建表單,我想用自定義查詢的結果填充下拉列表。這裏是一個示例php代碼:Symfony2/Doctrine2 SQL Select條件

<?php 
public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder 
     //... 
     ->add('type', 'entity', array(
      'class'   => 'EventBundle:Event', 
      'query_builder' => function (EntityRepository $er) { 
       return $er 
        ->createQueryBuilder('e') 
        ->add('select', 'e.id, CONCAT(IF (e.modified > NOW(), "Pending: ", ""), e.name) as name') 
       ; 
      } 
     )) 
    ; 
} 
?> 

雖然我找不到設置此SELECT子句的方法。我正在尋找Zend Framework中類似於「new Zend_Db_Expr(...)」的東西。 有沒有辦法用複雜的SELECT子句創建此查詢,並將它作爲原生SQL代碼輸入?

預先感謝您!

回答

0

那麼,你提供的查詢應該是DQL,而不是SQL。

並看到IF()是如何not valid DQL,我不知道你可以做什麼來解決這個問題。也許讓實體類本身通過property option的方式進行連接?

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder 
     //... 
     ->add('type', 'entity', array(
      'class'   => 'EventBundle:Event', 
      'property'  => 'modifiedName', 
     )) 
    ; 
} 

然後在EventBundle \實體\事件

public function getModifiedName() 
{ 
    return $this->modified > new \DateTime() 
    ? 'Pending: ' . $this->getName() 
    : $this->getName() 
    ; 
} 
+0

是的,我的問題基本上是如何編寫IF和CONCAT使用DQL的SELECT子句。如果「IF」在DQL中無效,那麼我應該堅持使用PHP邏輯的建議,儘管我認爲一般情況下如果在數據庫中可以完成某些工作,應該在數據庫中完成,而不是在PHP中完成。 –