2015-02-04 4 views
2

"ProductVariant"와 OTM 관계가있는 "Product"엔티티가 있습니다.sonata_type_collection에 쿼리/필터 추가

"isMaster = false"인 ProductVariants 만 표시되는 sonata_type_collection을 생성하고 싶습니다.

sonata_type_collection에서 query_builder를 사용할 수 없습니다. 생성 된 목록을 조작하고 새로운 ProductVariants를 Product 엔터티에 삽입 할 수있는 또 다른 방법이 있습니까?

내 기관 :

/** 
* Product 
* 
* @ORM\Table(name="product") 
* @Gedmo\SoftDeleteable(fieldName="deletedAt") 
* @ORM\Entity 
*/ 
class Product 
{ 

    /** 
    * @var ArrayCollection $variants 
    * @ORM\OneToMany(targetEntity="My\Bundle\ProductVariant", mappedBy="product", cascade={"all"}, orphanRemoval=true) 
    */ 
    private $variants; 
} 



/** 
* ProductVariant 
* 
* @ORM\Table(name="productVariant") 
* @Gedmo\SoftDeleteable(fieldName="deletedAt") 
* @ORM\Entity 
*/ 
class ProductVariant 
{ 

    /** 
    * @var Product 
    * @ORM\ManyToOne(targetEntity="My\Bundle\Product", inversedBy="variants") 
    */ 
    private $product; 
} 

ProductAdmin :

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('variants', 'sonata_type_collection', 
      array(
       'label' => 'A nice label', 
       'btn_add' => false, // Because adding won't work with the softdeletable variants 
       'type_options' => array(
        'delete' => true, 
       ) 
      ), 
      array(
       'edit' => 'inline', 
       'inline' => 'table', 
       'delete' => 'inline' 
      ) 
     ) 
    ; 
} 
+0

어떤 특별한 이유는' –

+0

query_builder이 sonata_type_collection에 수 없습니다 query_builder' ? –

+0

당신이 당신의 엔티티 정의를 제공 할 수 –

답변

0

당신은 ProductVariant의 다른 유형에 대해 다른 getter 및 setter를 만들 수 있습니다. 사용하지 않는

내 \ 번들 \ 제품

public function getNonMasterVariants() { 
    return $this->variants->filter(function(My\Bundle\ProductVariant $item) { 
     return !$item->isMaster(); 
    }); 
} 

public function getMasterVariants() { 
    return $this->variants->filter(function(My\Bundle\ProductVariant $item) { 
     return $item->isMaster(); 
    }); 
} 

ProductAdmin

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('nonMasterVariants', 'sonata_type_collection', 
      array(
       ... 
      ), 
      array(
       ... 
      ) 
     ) 
    ; 
}