我的数据库模式:
LIKE PAGE ARTICLE
id id id
userid name text
itemid
LIKE.itemid -> PAGE.id "or" ARTICLE.id
一般我都是这样用的;
页面.php;
/**
* @ORM\OneToMany(targetEntity="Like", mappedBy="page")
*/
protected $likes;
文章.php;
/**
* @ORM\OneToMany(targetEntity="Like", mappedBy="article")
*/
protected $likes;
点赞.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;
像这样等等
我该怎么办?
最佳答案
您可能想创建一个父类(super class)型,比如 Document
,Article
和 Page
可以从中继承。然后你的 Like
可以与 Document
相关。
Doctrine2 ORM 支持 three types of inheritance :映射父类(super class)、单表和类表。选择您需要的那个将需要一些关于您的使用要求的背景。
阅读上面链接的文档页面上每个选项的设计时注意事项、性能影响和 SQL 模式注意事项,找出适合您的选项。
关于mysql - Doctrine2 条件关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20764673/