我有一个实体“Product”,它与“ProductVariant”有OTM关系。
我希望能够生成一个sonata_type_collection,其中只显示带有“isMaster = false”的ProductVariants。
我不能在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)
您可以为不同类型的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(
...
)
)
;
}