我的数据库模式:
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;
像这样,等等。
我该怎么办?
你可能
想创建一个超类型,比如Document
,Article
和Page
可以从中继承。然后,您的Like
可以与Document
相关。
Doctrine2 ORM支持三种类型的继承:映射超类,单个表和类表。选择您需要的那个将需要一些有关您的使用要求的背景知识。
阅读上面链接的文档页上每个选项的设计时注意事项、性能影响和 SQL 架构注意事项,以确定哪个选项适合你。