我对 Doctrine 的映射策略有疑问。
实现继承有两种不同的方式:MappedSuperclass 或Inheritance Mapping。我正在尝试做的是以下内容:
/**
* @ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({"B" = "B","C" = "C"})
* @ORM\HasLifecycleCallbacks
*/
abstract class A {
OneToManyMappingToD
}
/**
* @ORM\Entity
*/
class B {
}
/**
* @ORM\Entity
*/
class C {
}
/**
* @ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({"E" = "E","F" = "F"})
* @ORM\HasLifecycleCallbacks
*/
abstract class D {
ManyToOneToA
}
/**
* @ORM\Entity
*/
class E {
}
/**
* @ORM\Entity
*/
class F {
}
映射验证没有发现任何问题,映射文件正常。但是当我在表单中使用这些实体时 -> submit() 我必须等待大约 30 多秒并且 Doctrine 执行超过 8000 次调用。所以我认为我的映射有问题。
我不能使用任何 MappedSuperClasses,因为我绝对需要 oneToMany 关系。我认为问题在于,A 类和 D 类不是 discriminatorMap 的一部分,并且该学说无法正确映射关系。但是A和D并不意味着是一个常规实体,因为它们只是提供基本属性。
如何在不收到超过 8000 次 SELECT 原则调用的情况下实现这一目标?
谢谢!
最佳答案
根据我的经验,使用类表继承很适合这种类型的关联。
文档指出使用此策略会影响性能,但我不敢相信它会生成 8000 个 SELECT 查询。
关于forms - 带有抽象基类的 Doctrine 继承映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21890844/