gpt4 book ai didi

php - Doctrine 多级继承映射

转载 作者:可可西里 更新时间:2023-10-31 23:49:28 24 4
gpt4 key购买 nike

我有四种类型的产品,我想将它们映射到 MySQL RDBMS 上的 Doctrine ORM 结构。产品为PrepaidProductPostpaidProductMobilePrepaidProductMobilePostpaidProduct,结构如下:

abstract class Product {
/**
* @ORM\Column(type="integer")
*/
private $price;

...
}

class PrepaidProduct extends Product {
/**
* @ORM\Column(type="integer")
*/
private $credit;

/**
* @ORM\OneToMany(targetEntity="PrepaidDiscount")
*/
private $prepaidDiscounts;
}

class PostpaidProduct extends Product {
/**
* @ORM\OneToMany(targetEntity="BundleMapping")
*/
private $bundleMappings;
}

class MobilePrepaidProduct extends PrepaidProduct {
/**
* @ORM\ManyToOne(targetEntity="Device")
*/
private $device;
}

class MobilePostpaidProduct extends PostpaidProduct {
/**
* @ORM\ManyToOne(targetEntity="Device")
*/
private $device;
}

主要思想是我想使用一个服务(工厂),它将使用 PostpaidProduct 类的基本类结构来创建相应的包映射的结构,所以我想我需要它作为映射的父类(super class)。

在我看来,要走的路是有两个单独的表,一个用于 PostpaidProduct,一个用于 PrepaidProduct,并且对 的表进行单表继承code>MobilePostpaidProduct/PostpaidProductMobilePrepaidProduct/PrepaidProduct

大家怎么看?关于对此建模的最佳方法有什么想法吗?

最佳答案

如果您像我认为的那样使用 RDBMS 层 [MySQL、Postgre],我认为您的建议是最佳选择。

如果子类有*一点更多的属性,最重要的可能是关系,你实际上是在促进组合,你的数据表示不会是稀疏的[即主表中不会有很多空字段]。

另一方面,如果您只想坚持组合 [在大多数情况下更可取] - $device 是 Mobile 类中唯一的附加关系吗?如果是这样,您可以在存储库类中编写一个 findAllMobileProducts 方法,该方法将返回设备不为 null 的每个产品,等等。

关于php - Doctrine 多级继承映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12618161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com