一个连接表,用于两个多对多关系

时间:2013-09-05 10:10:30

标签: symfony doctrine many-to-many jointable

我正在研究一种向两个不同实体添加标签的解决方案。 为了在前端轻松获取数据,我创建了一个名为Tag_Mapping的joinTable,如下所示:

class TagMapping
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Tag", inversedBy="tags")
     */
    private $tag;

    /**
     * @ORM\ManyToOne(targetEntity="Feed", inversedBy="tags")
     */
    private $feed;

    /**
     * @ORM\ManyToOne(targetEntity="Question", inversedBy="tags")
     */
    private $question;
...
}

标签实体:

class Tag
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255, unique=true)
     */
    private $name;

    /**
     * @Gedmo\Slug(fields={"name"})
     * @ORM\Column(unique=true)
     */
    private $slug;

    /**
     * @ORM\OneToMany(targetEntity="TagMapping", mappedBy="tag", cascade="remove")
     */
    private $tags;

    ...
}

在其他实体(Feed和Question)中,我引用了像这样的TagMapping实体

...
/**
 * @ORM\ManyToMany(targetEntity="Tag")
 * @JoinTable(name="tag_mapping",
 *      joinColumns={@JoinColumn(name="feed_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="tag_id", referencedColumnName="id")}
 * )
 */

 private $tags;  
...

我面临的问题是它不是一种有效的方法,因为它在我尝试执行时显示错误:

php app/console doctrine:schema:update --force

说tag_mapping表已经存在。 你有什么想法我怎么能只使用一个joinTable来完成它而不是每个关系一个?

感谢。

0 个答案:

没有答案