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