Doctrine:这是关系还是自定义数据检索?

Posted

技术标签:

【中文标题】Doctrine:这是关系还是自定义数据检索?【英文标题】:Doctrine: Is this a relation or custom data retrieval? 【发布时间】:2014-12-06 17:36:55 【问题描述】:

我有一个名为 product 的实体,它(除其他外)有两个名为 Manufacturer 和 PartNumber 的字段。另一个名为 SupplierProduct 的实体也包含这两个字段(以及其他字段)。当我检索产品时,我想检索与正在查看的产品具有相同制造商和零件编号的所有供应商产品,并且能够通过产品对象中的字段访问此集合。

这是一种教义关系(某种一对多的关系?),如果是,我将如何通过注释来设置它?如果不是,我假设我必须手动检索数据并将供应商产品的集合设置为产品?重要的是,Manufacturer 和 partno 不是产品实体的主键,它们必须是指定的连接列。

【问题讨论】:

【参考方案1】:

据我所知,学说 2 并不直接支持这种复合关系。

您可以创建包含产品、供应商产品、制造商、零件号字段的 ManufacturerPartNumberEntity。然后,您可以使用此实体来链接产品和产品供应商。保持同步有点麻烦,有点多余,但它可以实现快速查询。

您甚至可以从您的产品/供应商产品实体中删除制造商和零件编号。这当然取决于你需要你的模型做什么。

总体而言,仅做一个额外的查询可能是您最好的选择。除此之外,这意味着产品可能在一个数据库中,而供应商产品在另一个数据库中。

【讨论】:

我选择调用另一个 findby(array('manufacturer' => '...', 'part_no' => '...') 来调用供应商产品,但必须每次我想创建产品实体时都这样做很烦人。我是否能够覆盖自定义存储库中的所有 findby 以注入额外的查询? 并非如此。但是问问自己,为什么每次加载产品时都需要加载 SupplierProduct?我怀疑你可以重构你的设计。冗余信息应始终引起注意。 而且经过考虑,重构确实是必要的,也是限制因素。谢谢!

以上是关于Doctrine:这是关系还是自定义数据检索?的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义 Doctrine 2 数据类型的依赖注入

Doctrine / Symfony:在使用 QueryBuilder 之前将自定义类型转换为数据库值

如何生成扩展自定义记录类的 Doctrine 模型/类

[Doctrine Migrations] 数据库迁移组件的深入解析三:自定义数据字段类型

教义自定义数据类型

Doctrine 2 自定义 ObjectMultiCheckbox 值