【问题标题】:Add a query/filter to sonata_type_collection向 sonata_type_collection 添加查询/过滤器
【发布时间】:2015-02-04 08:57:35
【问题描述】:

我有一个实体“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;
}

产品管理员:

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'
            )
        )
    ;
}

【问题讨论】:

  • 任何不使用query_builder的具体原因
  • query_builder 在 sonata_type_collection 中是不可能的
  • 你能提供你的实体定义吗?
  • 我在帖子中提供了实体定义。
  • 要在f​​ormMapper中还是在过滤器中生成列表?

标签: symfony sonata-admin


【解决方案1】:

您可以为不同类型的ProductVariants 创建不同的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();
    });
}

产品管理员

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

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2019-04-14
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多