我有一个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关系时,我看到没有新行!
因此,应用程序不会报告任何错误。上传的其他形式元素得到了很好的指导,并转发到“成功” - 路径,但我没有看到标签的持久性。
答案 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。