symfony2 多对多奏鸣曲管理 model_list

Voj*_*ech 5 php symfony doctrine-orm sonata-admin

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

\n\n

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

\n\n

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

\n\n

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

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

这是函数configureFormFields的相对ShopAdmin:

\n\n
$formMapper\n        ->add(\'shopName\',null, array(\'label\' => \'N\xc3\xa1zev obchodu\'))\n        ->add(\'brandName\',null, array(\'label\' => \'N\xc3\xa1zev brandu\'))\n        ->add(\'discountId\', \'sonata_type_model_list\', array(\n            \'btn_add\'       => \'Add discount\',      //Specify a custom label\n            \'btn_list\'      => \'button.list\',     //which will be translated\n            \'btn_delete\'    => false,             //or hide the button.\n            \'btn_catalogue\' => \'SonataNewsBundle\' //Custom translation domain for buttons\n        ), array(\n            \'placeholder\' => \'Nothing selected\',\n            \'expanded\' => true, \'multiple\' => true, \'by_reference\' => false\n        ))\n        ->add(\'street\',null, array(\'label\' => \'Ulice\'))\n        ->add(\'city\',null, array(\'label\' => \'M\xc4\x9bsto\'))\n        ->add(\'zip\',null, array(\'label\' => \'PS\xc4\x8c\'))\n        ->add(\'gps\',null, array(\'label\' => \'GPS\'))\n        ->add(\'openingHours\',\'textarea\', array(\'label\' => \'Otev\xc3\xadrac\xc3\xad doba\'))\n        ->add(\'eventId\',null, array(\'required\'=>false,\'label\' => \'Event\'));\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我有一对多关系(对任何商店都有一个折扣),那么管理员就可以工作。Symfony 生成折扣和商店 ID 的参考表,以供多对多使用使用。

\n\n

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

\n\n

这输出**一对多**

\n\n

是否也可以用多对多来做到这一点?

\n

cez*_*zar 1

您不能sonata_type_model_list多对多关系一起使用。
您可以做的是改用sonata_type_model并将选项设置multipletrue

->add('discountId', 'sonata_type_model', array(
    'multiple' => true,
    // other options
))
Run Code Online (Sandbox Code Playgroud)

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

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

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

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