针对sonata_type_collection

时间:2015-11-23 13:04:49

标签: php symfony sonata-admin

是否可以为sonata_type_collection设置查询?例如,我现在就这样做......

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

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

            ))

这很好用,但我在集合中显示的交易有状态......我只想显示状态设置为真的交易......我怎么能这样做?我可以设置收集查询吗?

问题是我能做到这一点:

        ->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那样..

我该怎么办?

1 个答案:

答案 0 :(得分:0)

我知道的唯一方法是在您的实体中创建一个属性和getter,它只返回您想要的值并在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配合使用。