如何使原则2中的工厂成为实体



示例:

我们有实体User。对于不同的用户类型,用户具有不同的参数。用户类型"admin"、"manager"、"customer"都有自己的参数集。

如何让工厂成为实体用户?我的意思是结构和函数getTypeParams返回用户类型的参数。

我是如何制作的:

实体用户拥有:

/**
 * @ORMId
 * @ORMColumn(type="integer")
 * @ORMGeneratedValue
 */
private $id;
/**
 * @ORMColumn(type="string", length=10)
 */
private $type;
/**
 * @ORMOneToOne(targetEntity="UserTypeAdmin", cascade={"persist", "remove"}, orphanRemoval=true)
 * @ORMJoinColumn(name="typeadmin_id", referencedColumnName="id", nullable=true, onDelete="CASCADE")
 */
private $type_admin;

实体UserTypeAdmin为admin设置了参数。

但问题是数据库表中的实体User有列:typeadmin_id、typemanager_id、typecustomer_id。。。其中一列有值,但其他列等于null。

如果用户有一个类型,为什么我们需要为每个类型制作列:用户表中的typeadmin_id、typemanager_id、typecustomer_id?

有什么办法做得漂亮吗?

基本问题是不能让一个属性(类型)指向多个表。至少效率不是很高。您必须首先查询类型,然后查找该类型的表,然后执行第二个查询以获取类型实体。凌乱的

幸运的是,条令2支持类表继承:http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html#class-表继承

你会想创建一个基本类型实体,然后从中派生出各个类型(Admin、Manager等)。进行一些配置,你会在用户实体和它的类型之间找到一个很好的一对一关系,每个类型都有自己独特的属性集。

最新更新