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