0

我正在研究一种将标签添加到两个不同实体的解决方案。为了在前端轻松获取数据,我创建了一个名为 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 而不是每个关系一个 joinTable 来完成它吗?

谢谢。

4

0 回答 0