Php symfony2多对多索纳塔管理模型列表

Php symfony2多对多索纳塔管理模型列表,php,symfony,doctrine-orm,sonata-admin,Php,Symfony,Doctrine Orm,Sonata Admin,我正在使用最新的Symfony2和Sonata Admin来维护我的网站,这就是我的问题: 我有两个实体:商店和折扣。一个商店可以有许多折扣,一个折扣可以分配给许多商店。因此,它应该是多对多关系 我想在ShopAdmin中使用Sonata的type_model_列表,这样我可以从弹出窗口中选择这些折扣并选择多个。这可能吗 这是我的店铺实体的一部分: use Doctrine\Common\Collections\ArrayCollection; ... /** * @var \Doct

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

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

我想在ShopAdmin中使用Sonata的type_model_列表,这样我可以从弹出窗口中选择这些折扣并选择多个。这可能吗

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

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为折扣和店铺ID生成了参考表,用于多对多

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


也可以用多对多的方法来做吗

您不能使用带有多对多关系的
sonata\u type\u model\u list

您可以使用
sonata\u type\u model
,并将选项
multiple
设置为
true

->add('discountId', 'sonata_type_model', array(
    'multiple' => true,
    // other options
))
对于当前版本的SonataAdminBundle(截至2018年2月2019日为3.x),示例如下所示:

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

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

这将创建一个下拉列表,以选择多个相关对象和添加新按钮(如果您通过
btn\u添加
,则创建添加折扣按钮)创建一个新的相关对象。

要实现所需的输出,您必须为您的连接表创建实体,该连接表作为中间实体,并保持商店和折扣实体的关系,为了更好地了解情况,请看一看我实现它是为了其他目的,但您可以从中选择逻辑