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 为 many 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的主要内容,如果未能解决你的问题,请参考以下文章
使用 Doctrine 和 Symfony2 查询多对多关系