2012-04-30 7 views
0

私はSymfony2でフォームを作成していますが、カスタムクエリの結果をドロップダウンリストに入力したいと思います。ここに例のPHPコードです:Symfony2/Doctrine2 SQL Select節with条件

<?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句withougを使用してこのクエリを作成する方法がありますか?ネイティブSQLコードとして入力しますか?

ありがとうございます!

答えて

0

あなたが提供しているクエリは、SQLではなくDQLであるはずです。

IF()がnot valid DQLであることを見て、私はあなたがこれを解決するためにできることについてよく分かりません。おそらく、Entityクラス自身が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

にはい、私の質問はDQLを使用してSELECT句でIFとCONCATの書き方を基本的にあります。 "IF"がDQLで有効でない場合は、代わりにPHPロジックを使用することをお勧めします。私の意見では、一般的にデータベースで何かができる場合、PHPではなくデータベースで行う必要があります。 –