教义2 条件关系



我的数据库模式:

LIKE      PAGE    ARTICLE    
id        id      id
userid    name    text
itemid

LIKE.itemid -> PAGE.id "or" ARTICLE.id

通常,我使用这种方式;

页.php;

/**
 * @ORMOneToMany(targetEntity="Like", mappedBy="page")
 */
 protected $likes;

文章.php;

/**
 * @ORMOneToMany(targetEntity="Like", mappedBy="article")
 */
 protected $likes;

喜欢.php;

/**
 * @ORMManyToOne(targetEntity="Page", inversedBy="likes")
 * @ORMJoinColumn(name="itemid", referencedColumnName="id")
 */
 protected $page;
/**
 * @ORMManyToOne(targetEntity="Article", inversedBy="likes")
 * @ORMJoinColumn(name="itemid", referencedColumnName="id")
 */
 protected $article;
但是

,但是,项 id 列在两个表(页面和文章)中将是相同的。不会实现。

问题;我想添加一个条件。喜欢这个;

LIKE      PAGE    ARTICLE    
id        id      id
userid    name    text
itemid
**itemtype**

/**
 * @ORMManyToOne(targetEntity="Article", inversedBy="likes")
 * @ORMJoinColumn(name="itemid", referencedColumnName="id", **condition="itemtype=1"**)
 */
protected $article;

像这样,等等。

我该怎么办?

你可能

想创建一个超类型,比如DocumentArticlePage可以从中继承。然后,您的Like可以与Document相关。

Doctrine2 ORM支持三种类型的继承:映射超类,单个表和类表。选择您需要的那个将需要一些有关您的使用要求的背景知识。

阅读上面链接的文档页上每个选项的设计时注意事项、性能影响和 SQL 架构注意事项,以确定哪个选项适合你。

相关内容

  • 没有找到相关文章

最新更新