symfony2 多对多奏鸣曲 admin model_list

Posted

技术标签:

【中文标题】symfony2 多对多奏鸣曲 admin model_list【英文标题】:symfony2 many-to-many sonata admin model_list 【发布时间】:2014-04-01 15:30:53 【问题描述】:

我正在使用最新的 Symfony2 和 Sonata Admin 来维护我的网站,这是我的问题:

我有两个实体:Shop 和 Discount。一个店铺可以有多个折扣,一个折扣可以分配给多个店铺。因此它应该是多对多关系。

我想在 ShopAdmin 中使用奏鸣曲的 type_model_list,这样我就可以从弹出窗口中选择这些折扣并选择多个。这可能吗?

这是我的商店实体的一部分:

use Doctrine\Common\Collections\ArrayCollection;   
 ...
/**
 * @var \Doctrine\Common\Collections\ArrayCollection
 * @ORM\ManyToMany(targetEntity="ShoppingFever\ShoppingFeverBundle\Entity\Discount", fetch="EAGER")
 * @ORM\JoinColumn(name="discountId", referencedColumnName="id")
 */
private $discountId;

这是功能configureFormFields的相关ShopAdmin:

$formMapper
        ->add('shopName',null, array('label' => 'Název obchodu'))
        ->add('brandName',null, array('label' => 'Název brandu'))
        ->add('discountId', 'sonata_type_model_list', array(
            'btn_add'       => 'Add discount',      //Specify a custom label
            'btn_list'      => 'button.list',     //which will be translated
            'btn_delete'    => false,             //or hide the button.
            'btn_catalogue' => 'SonataNewsBundle' //Custom translation domain for buttons
        ), array(
            'placeholder' => 'Nothing selected',
            'expanded' => true, 'multiple' => true, 'by_reference' => false
        ))
        ->add('street',null, array('label' => 'Ulice'))
        ->add('city',null, array('label' => 'Město'))
        ->add('zip',null, array('label' => 'PSČ'))
        ->add('gps',null, array('label' => 'GPS'))
        ->add('openingHours','textarea', array('label' => 'Otevírací doba'))
        ->add('eventId',null, array('required'=>false,'label' => 'Event'));

如果我有 一对多 关系(任何商店打折),管理员就可以工作。 Symfony 为 ma​​ny to many 生成折扣和商店 ID 的参考表。

这是一对多输出,我希望它适用于多对多,所以现在它说施华洛世奇,会有几个折扣。

多对多也可以吗?

【问题讨论】:

要实现所需的输出,您必须为连接表创建实体,该连接表充当中间实体并与商店和折扣实体保持关系,以便更好地了解***.com/questions/21712459/… i已经为其他目的实现了它,但你可以从那里选择一个逻辑 【参考方案1】:

您不能将sonata_type_model_list 用于多对多关系。 您可以做的是改用sonata_type_model 并将选项multiple 设置为true

->add('discountId', 'sonata_type_model', array(
    'multiple' => true,
    // other options
))

对于当前版本的 SonataAdminBundle(截至今天 2019-02-18 为 3.x),示例应如下所示:

// import ModelType
use Sonata\AdminBundle\Form\Type\ModelType;

// code example
->add('discountId', ModelType::class, [
    'multiple' => true,
    // other options
])

这将创建一个下拉列表以选择多个相关对象和添加新按钮(或添加折扣,如果您设置了该低谷btn_add)来创建一个新的相关对象。

【讨论】:

以上是关于symfony2 多对多奏鸣曲 admin model_list的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 删除并保存多对多关系

多对多和形式 Symfony2

使用 Doctrine 和 Symfony2 查询多对多关系

多对多的 Symfony2 DQL 更新查询

阻止 SonataAdmin / Symfony2 使用 sonata_type_admin 嵌入式管理员创建空对象

Symfony2 - 奏鸣曲 Datagrid 过滤器操作符转换为教义_orm_class 字段失败