0

Symfony2 でフォームを作成していますが、ドロップダウンにカスタム クエリの結果を入力したいと考えています。php コードの例を次に示します。

<?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(...)」に似たものを探しています。ネイティブ SQL コードとして入力せずに、複雑な SELECT 句を使用してこのクエリを作成する方法はありますか?

前もって感謝します!

4

1 に答える 1

0

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

そして、 IF() が有効な DQLではないことを見て、これを修正するために何ができるかわかりません。おそらく、プロパティ オプションを使用して、エンティティ クラス自体に連結を行わせるのでしょうか。

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

そして EventBundle\Entity\Event に

public function getModifiedName()
{
  return $this->modified > new \DateTime() 
    ? 'Pending: ' . $this->getName()
    : $this->getName()
  ;
}
于 2012-04-30T20:12:03.440 に答える