Symfony2表单:标签集合不会被持久化

时间:2012-07-10 08:49:26

标签: forms symfony doctrine-orm

我有一个Upload实体,可以有很多代码,

/**
 * @ORM\ManyToMany(targetEntity="Tag", mappedBy="uploads")
 */
protected $tags;

Tag可以在多次上传

/**
 * @ORM\ManyToMany(targetEntity="Upload", inversedBy="tags")
 * @ORM\JoinTable(name="upload_tag")
 */
protected $uploads;

我有一个表单,我可以上传文件,并选择多选的标签....这里是UploadType文件的片段

......other form elements.....
$builder->add('tags', 'entity', array(
    'multiple' => true,
    'property' => 'name',
    'class' => 'BoiMembersBundle:Tag',
));

论坛提交正常,没有错误.....但当我查看我的upload_tag,它表示我的mysql数据库中的ManyToMany关系时,我看到没有新行!

因此,应用程序不会报告任何错误。上传的其他形式元素得到了很好的指导,并转发到“成功” - 路径,但我没有看到标签的持久性。

1 个答案:

答案 0 :(得分:1)

这是因为Upload它不是与Tag的关系的所有者,并且您在关系本身内持有Upload新实体(Tag类型)。实际上,它具有mappedBy属性。

您可以配置级联option

/**
 * @ORM\ManyToMany(targetEntity="Tag", mappedBy="uploads", cascade={"persist"})
 */
protected $tags;

或者让Upload成为关系的所有者(如果您认为自己永远不会将Tag实体与Upload内的新class Upload { /** * BIDIRECTIONAL - OWNING SIDE * @ORM\ManyToMany(targetEntity="Tag", inversedBy="uploads") * @ORM\JoinTable(name="upload_tag") */ protected $tags; } class Tag { /** * BIDIRECTIONAL - INVERSE SIDE * @ORM\ManyToMany(targetEntity="Upload", mappedBy="uploads") */ protected $uploads; } 保持在一起):

{{1}}

请参阅Doctrine 2.x文档中的Working with Associations