在集合中使用实体时,实体将设置在我调用的属性上。
这种有道理,ProductType说"嘿,你想改变标题吗?确定的人,这里列出了你想要的那些实体" - 并在提交时,它将实体设置为标题。所以这看起来不是实现我想要的正确方法(为用户分配n个产品),但它似乎是推荐的方式:
http://symfony.com/doc/current/cookbook/form/form_collections.html
所以我让User与Product:
具有单向ManyToMany关系/**
* @ORM\ManyToMany(targetEntity="Product")
*/
protected $products;
用户表单有一个集合,每个集合都是一个实体字段类型 - 用户表单类型:
...
->add('products', 'collection', array('type'=>new ProductType()))
在ProductType中我有:
$builder->add('title', 'entity', array(
'class' => 'ThingsStuffBundle:product',
'property' => 'title',
'required' => false,
'empty_value' => 'product',
'query_builder' => function(EntityRepository $er) {
return $er
->createQueryBuilder('p')
->orderBy('p.title', 'ASC');
},
));
哪个有效。有点。当我提交表单时,似乎我更新了产品标题,而不是将其用作选择数组。
提交的数据:
$userEntity->products[
productEntity{
id = 1,
title = productEntity{
id = 1,
title = 'balls'
}
},
productEntity{
id = 2,
title = productEntity{
id = 2,
title = 'suck'
}
}
]
答案 0 :(得分:0)
如果您想构建此类添加/删除集合
->add('products', 'collection', array('type'=>new ProductType(),
'allow_add' => true,
'allow_delete' => true
))
然后在ProductType中:
$builder->add('product', 'entity', array(
'class' => 'ThingsStuffBundle:product'
));
注意:如果您按照文档中的说明添加相应的前端javascript,则此添加/删除将起作用 想象一下像你在其中添加或删除产品的包的集合。