Php symfony2多对多索纳塔管理模型列表
我正在使用最新的Symfony2和Sonata Admin来维护我的网站,这就是我的问题: 我有两个实体:商店和折扣。一个商店可以有许多折扣,一个折扣可以分配给许多商店。因此,它应该是多对多关系 我想在ShopAdmin中使用Sonata的type_model_列表,这样我可以从弹出窗口中选择这些折扣并选择多个。这可能吗 这是我的店铺实体的一部分: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
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添加,则创建添加折扣按钮)创建一个新的相关对象。要实现所需的输出,您必须为您的连接表创建实体,该连接表作为中间实体,并保持商店和折扣实体的关系,为了更好地了解情况,请看一看我实现它是为了其他目的,但您可以从中选择逻辑