mysql - Doctrine2 条件关系

标签 mysql sql symfony doctrine-orm relationship

我的数据库模式:

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)型,比如 DocumentArticlePage 可以从中继承。然后你的 Like 可以与 Document 相关。

Doctrine2 ORM 支持 three types of inheritance :映射父类(super class)、单表和类表。选择您需要的那个将需要一些关于您的使用要求的背景。

阅读上面链接的文档页面上每个选项的设计时注意事项、性能影响和 SQL 模式注意事项,找出适合您的选项。

关于mysql - Doctrine2 条件关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20764673/

相关文章:

symfony - 错误 : Class . ..\Entity\.. 没有名为的关联

mysql - 优化两个表之间重复 n-uplet 的搜索

php - 如何在 Twig 模板中显示包含 HTML 的字符串?

php - 如何将用户信息和项目获取到数据库中的同一个表中

php - Mysql选择具有最小和最大数据的行中的间隙

mysql - 我怎么能在 MySQL 中做到这一点

php - 2 Mysql表sum列分组并求减

mysql - 将 MySQL 中的日期视为过去 12 个月的日期,而不管实际存储的年份

SQL ROW_NUMBER 与 INNER JOIN

mysql - 将用户历史记录保存在数据库中