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 框架中的“new Zend_Db_Expr(...)”的东西。有没有一种方法可以使用复杂的 SELECT 子句创建此查询,而无需将其键入为本机 SQL 代码?

先感谢您!

4

1 回答 1

0

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

并且看到 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 回答