Symfony2 / Doctrine2 SQL选择带条件的子句

时间:2012-04-30 17:14:25

标签: sql symfony doctrine-orm native

我正在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子句的方法。我期待类似于&#34;新的Zend_Db_Expr(...)&#34;在Zend Framework中。 有没有办法用复杂的SELECT子句创建这个查询,并将其键入为本机SQL代码?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,您提供的查询应该是DQL,而不是SQL。

看看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 \ Entity \ Event

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