0

我有一个UploadEntity ,它可以有很多标签,

/**
 * @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,但我没有看到标签的持久化。

4

1 回答 1

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;
}

请参阅有关 Doctrine 2.x 文档的使用关联。

于 2012-07-10T09:28:22.910 回答