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