2012-04-30 3 views
0

Я создаю форму в Symfony2, и я хотел бы заполнить выпадающий список результатами пользовательского запроса. Вот пример кода php:Symfony2/Doctrine2 SQL Select Clause with Condition

<?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_Db_Expr (...)» в Zend Framework. Есть ли способ добиться создания этого запроса с помощью сложного предложения SELECT withoug, набирая его как собственный код SQL?

Спасибо заранее!

ответ

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() 
    ; 
} 
+0

Да, мой вопрос заключается в основном, как писать IF и CONCAT в ЗЕЬЕСТ с помощью DQL. Если «IF» недействительно в DQL, тогда я должен придерживаться вашего предположения об использовании PHP-логики, хотя, по моему мнению, в целом, если что-то можно сделать в базе данных, это должно быть сделано в базе данных, а не в PHP. –