2015-11-23 2 views
0

Возможно ли задать запрос для sonata_type_collection? К примеру II просто сделать это сейчас ...Symfony2 Sonata запрос администратора для sonata_type_collection

 ->add('deal', 'sonata_type_collection', 
      array(

       'required' => true, 
       'label' => 'product', 
      ), 
      array(
       'property' => 'product', 
       'edit' => 'inline', 
       'inline' => 'table', 

      )) 

Это прекрасно работает, но дело, что я показываю в коллекции есть статусы ... И я только хочу, чтобы отобразить сделки, которые имеют статусы установить до true ... Как я могу это сделать? Можно ли настроить запрос для сбора?

Дело в том, что я могу сделать это:

 ->add('deal', null, array(
      'by_reference' => false, 
      'class' => 'Mp\ShopBundle\Entity\DailyDeal', 
      'query_builder' => $this->modelManager->createQuery('Mp\ShopBundle\Entity\DailyDeal', 'h') 
       ->where('h.status = 1'), 
     ), array(
      'edit' => 'inline', 
      'inline' => 'table', 
     )) 

И таким образом, если это выбрать несколько сделок он сохраняет в массиве ... Я хочу, чтобы создать отдельный объект для каждой сделки я выбираю. Как sonata_type_collection делает ..

Что мне делать?

ответ

0

Единственный способ, которым я знаю, это создать свойство и getter в вашем Entity, которые возвращают только нужные вам значения и используют их в вашем классе Admin.

Entity.php

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

class Entity 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="XXX") 
    */ 
    private $dealsActivated; 

    public function getDealsActivated() 
    { 
     $collection = new ArrayCollection(); 
     foreach ($this->getDeal() as $deal) { 
      if ($deal->getStatus() === 1) { 
       $collection->add($deal); 
      } 
     } 

     return $collection; 
    } 
} 

admin.php

->add('dealsActivated', 'sonata_type_collection', 
    array(

     'required' => true, 
     'label' => 'product', 
    ), 
    array(
     'property' => 'product', 
     'edit' => 'inline', 
     'inline' => 'table', 

    ) 
) 

Это не оптимизирован, но работает с Sonata.

Смежные вопросы