我的数据库架构:
LIKE PAGE ARTICLE
id id id
userid name text
itemid
LIKE.itemid - > PAGE.id “或” ARTICLE.id
通常情况下,我会这样使用;
page.php文件;
/**
* @ORM\OneToMany(targetEntity="Like", mappedBy="page")
*/
protected $likes;
Article.php;
/**
* @ORM\OneToMany(targetEntity="Like", mappedBy="article")
*/
protected $likes;
Like.php;
/**
* @ORM\ManyToOne(targetEntity="Page", inversedBy="likes")
* @ORM\JoinColumn(name="itemid", referencedColumnName="id")
*/
protected $page;
/**
* @ORM\ManyToOne(targetEntity="Article", inversedBy="likes")
* @ORM\JoinColumn(name="itemid", referencedColumnName="id")
*/
protected $article;
但是,但是,itemid列在两个表(页面和文章)中都是相同的。不会实现。
问题;我想添加一个条件。像这样;
LIKE PAGE ARTICLE
id id id
userid name text
itemid
**itemtype**
和
/**
* @ORM\ManyToOne(targetEntity="Article", inversedBy="likes")
* @ORM\JoinColumn(name="itemid", referencedColumnName="id", **condition="itemtype=1"**)
*/
protected $article;
像这样,等等。
我该怎么办?
答案 0 :(得分:2)
你可能想要创建一个超级类型,比如Document
,Article
和Page
可以继承。然后,您的Like
可能与Document
s相关。
Doctrine2 ORM支持three types of inheritance:映射超类,单表和类表。选择你需要的那个将需要一些你的使用要求背景。
阅读上面链接的文档页面上每个选项的设计时考虑因素,性能影响和SQL架构注意事项,以找出适合您的选项。