Symfony 两个多对多关系的一个联接表
我正在研究向两个不同的实体添加标记的解决方案。 为了在前端轻松获取数据,我创建了一个名为Tag_Mapping的连接表,如下所示:Symfony 两个多对多关系的一个联接表,symfony,doctrine,many-to-many,jointable,Symfony,Doctrine,Many To Many,Jointable,我正在研究向两个不同的实体添加标记的解决方案。 为了在前端轻松获取数据,我创建了一个名为Tag_Mapping的连接表,如下所示: class TagMapping { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id;
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
表示标记映射表已经存在。
你知道我怎样才能只使用一个连接表而不是每个关系使用一个连接表吗
谢谢。您确定您的关系模型吗?在我看来,其中似乎存在冗余。这就是问题所在,通常关系应该是这样的:/***@ORM\OneToMany(targetEntity=“TagMaping”,mappedBy=“feed”,cascade={“all”})*/private$tags;但是当我这么做的时候,我不知道如何使用sonata管理包来管理它们