symfony2表单:如何保存实体以及如何将多个实体添加到同一表单?

时间:2015-02-13 17:58:09

标签: symfony doctrine-orm formbuilder

我在entitytype类

中有这个功能
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;

使用选择多个控件正确显示表单但我只能保存在存档表中,而不能保存在types_archives表中。有关如何修复的任何想法? 另外,我可以向同一类型添加多个实体吗?

谢谢

2 个答案:

答案 0 :(得分:1)

如果只保存在数据库中的关系的一面,请尝试执行以下步骤:

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类型检查以下链接:

http://symfony.com/doc/current/reference/forms/types/collection.html

答案 1 :(得分:0)

以下是我会给你的一些指示。 1.要保存相关实体,请尝试阅读" cascade persist"如果你使用的是学说。 2.要在表单上有多个实体,请阅读"类组成"。一个复合对象,您将其设置为表单"数据类"将允许您包含多个实体对象。