学说2条件关系

时间:2013-12-24 17:31:03

标签: mysql sql symfony doctrine-orm relationship

我的数据库架构:

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;
像这样,等等。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

你可能想要创建一个超级类型,比如DocumentArticlePage可以继承。然后,您的Like可能与Document s相关。

Doctrine2 ORM支持three types of inheritance:映射超类,单表和类表。选择你需要的那个将需要一些你的使用要求背景。

阅读上面链接的文档页面上每个选项的设计时考虑因素,性能影响和SQL架构注意事项,以找出适合您的选项。