一对多还是多对多?

Posted

技术标签:

【中文标题】一对多还是多对多?【英文标题】:One to many or many to many? 【发布时间】:2013-01-09 21:11:48 【问题描述】:

我正在创建一个包含多个页面和多个图像的网站。关系是许多页面可以有许多图像。因此,我通常会创建一个名为 page_images 的连接表,其中包含 page_id 和 image_id。我还需要连接表中的位置字段,以便可以订购每个页面的图像。

我今天一直在研究 Doctrine,并使用 Symfony2 实体来创建数据库。我尝试使用元数据使用多对多关系,但这为我创建了仅包含 page_id 和 image_id 的连接表。我不知道如何添加位置字段或任何其他字段,可以吗?

我假设的替代方法是创建从 page 表到 page_images 表以及从 images 表到 page_images 表的一对多关系,这意味着我还需要一个 PageImage Entity 类。

有人可以建议这种情况下的最佳做法吗?我一直在查看http://docs.doctrine-project.org/en/latest/reference/working-with-associations.html,但文档没有提到您是否可以向连接表添加其他字段。

更多信息:

class Image 

/**
 *
 * @ORM\OneToMany(targetEntity="PageImage", mappedBy="image")
 */
private $page_images;



class Page 

/**
 *
 * @ORM\OneToMany(targetEntity="PageImage", mappedBy="page")
 */
private $page_images;



class PageImage 

/**
 * @var integer
 *
 * @ORM\ManyToOne(targetEntity="Page", inversedBy="page_images")
 * @ORM\JoinColumn(name="page_id", referencedColumnName="id")
 */
private $page;


【问题讨论】:

【参考方案1】:

您已经得到响应:您需要从 PageImage 实体中获得 2 个 ManyToOne 关系。 然后你就可以在这个实体中添加额外的字段了。

【讨论】:

好的,那是正确的方法,是吗?我正在尝试学习 Symfony 和 Doctrine,并希望确保我以正确的方式而不是简单的方式来做这件事。如果您执行多对多操作,您是否无法在连接表中添加其他字段? 谢谢你的帮助老兄!

以上是关于一对多还是多对多?的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:NSPredicate 一对多对多关系

请给我讲讲在hibernate中,啥时候用“一对多”、“多对一”、“一对一”、“多对多”?

mybatis 一对一 一对多 多对多

一对一、一对多、多对多,如何设计数据表?

数据库中根据数据一对一,一对多,多对多关系设计

数据库表设计(一对多,多对多)