2012-04-30 61 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中完成。 –