symfony2 表单:如何保存实体以及如何将多个实体添加到同一表单?
symfony2 form: how to save entity and how to add more then one entity to the same form?
我在实体类型中有这个函数class
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
//...other controls
->add('types', 'entity', array(
'class' => 'MyApplicationBundle:Type',
'property' => 'type',
'expanded' => false,
'multiple' => true))
->add('save', 'submit');
}
归档实体有一个类型属性,多对多可能关系
/**
* @ORM\ManyToMany(targetEntity="Type", mappedBy="archives")
**/
private $types;
类型实体在另一边有档案属性
/**
* @ORM\ManyToMany(targetEntity="Archive", inversedBy="types")
* @ORM\JoinTable(name="types_archives")
**/
private $archives;
表单使用 select 多重控件正确显示,但我只能保存在存档 table 中,不能保存在 types_archives table 中。关于如何修复的任何想法?
另外,我可以将多个实体添加到同一类型吗?
谢谢
这里有一些我会给你的指示。
1. 要保存相关实体,如果您使用的是学说,请尝试阅读 "cascade persist"。
2. 要在表单上有多个实体,请阅读 "class composition"。您将设置为表单 "data class" 的复合对象将允许您包含多个实体对象。
如果数据库中只保存了关系的一侧,请尝试执行以下步骤:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
//...other controls
->add('types', 'entity', array(
'class' => 'MyApplicationBundle:Type',
// This makes form call setter method on related entity
'by_reference' => false,
'allow_add' => true,
'allow_delete' => true,
'property' => 'type',
'expanded' => false,
'multiple' => true))
->add('save', 'submit');
}
在 Archive
实体中:
public function addType(Type $type){
$this->types[] = $type;
$type->addArchive($this);
}
public function removeType(Type $type){
$this->types->removeElement($type);
$type->setArchive(null);
}
我希望这对您问题的第一部分有所帮助。
对于第二部分,您可以使用 collection
输入以下 link:
http://symfony.com/doc/current/reference/forms/types/collection.html
我在实体类型中有这个函数class
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
//...other controls
->add('types', 'entity', array(
'class' => 'MyApplicationBundle:Type',
'property' => 'type',
'expanded' => false,
'multiple' => true))
->add('save', 'submit');
}
归档实体有一个类型属性,多对多可能关系
/**
* @ORM\ManyToMany(targetEntity="Type", mappedBy="archives")
**/
private $types;
类型实体在另一边有档案属性
/**
* @ORM\ManyToMany(targetEntity="Archive", inversedBy="types")
* @ORM\JoinTable(name="types_archives")
**/
private $archives;
表单使用 select 多重控件正确显示,但我只能保存在存档 table 中,不能保存在 types_archives table 中。关于如何修复的任何想法? 另外,我可以将多个实体添加到同一类型吗?
谢谢
这里有一些我会给你的指示。 1. 要保存相关实体,如果您使用的是学说,请尝试阅读 "cascade persist"。 2. 要在表单上有多个实体,请阅读 "class composition"。您将设置为表单 "data class" 的复合对象将允许您包含多个实体对象。
如果数据库中只保存了关系的一侧,请尝试执行以下步骤:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
//...other controls
->add('types', 'entity', array(
'class' => 'MyApplicationBundle:Type',
// This makes form call setter method on related entity
'by_reference' => false,
'allow_add' => true,
'allow_delete' => true,
'property' => 'type',
'expanded' => false,
'multiple' => true))
->add('save', 'submit');
}
在 Archive
实体中:
public function addType(Type $type){
$this->types[] = $type;
$type->addArchive($this);
}
public function removeType(Type $type){
$this->types->removeElement($type);
$type->setArchive(null);
}
我希望这对您问题的第一部分有所帮助。
对于第二部分,您可以使用 collection
输入以下 link:
http://symfony.com/doc/current/reference/forms/types/collection.html