2012-07-10 74 views
0

我有一个Upload实体,可以有很多标签,Symfony2的形式:标签集合没有得到坚持

/** 
* @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关系,我没有看到新的行!

因此,该应用程序不会报告任何错误,以至于其他的其他形式元素的上传得到的好处,并转发到“成功”-Route,但我没有看到标签的persistanse。

回答

1

这是因为Upload它不是与Tag关系的所有者,你与新的实体持续UploadTag型)的关系本身内。实际上,它具有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; 
} 

关于Doctrine 2.x文档请参阅Working with Associations

+0

你的第二个解决方案完美运作。谢谢 – Confidence 2012-07-10 12:04:15