forms - 带有抽象基类的 Doctrine 继承映射

标签 forms symfony doctrine-orm mapping submit

我对 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 原则调用的情况下实现这一目标?

谢谢!

最佳答案

根据我的经验,使用类表继承很适合这种类型的关联。

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#class-table-inheritance

文档指出使用此策略会影响性能,但我不敢相信它会生成 8000 个 SELECT 查询。

关于forms - 带有抽象基类的 Doctrine 继承映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21890844/

相关文章:

html - 更改标签的 HTML 表单 CSS 属性

php - Symfony 2 缓存 Doctrine 查询结果

html - css在表单中 float 2个输入字段

Django form.MultipleChoiceField 。自定义模板中的复选框

php - 如何在 PHP 中添加 [ 从复选框表单结果中检索?

symfony - FOSUSER Bundle with multiple USer + Inheritance

php - symfony 中的类别树问题

php - symfony什么时候调用loadUserByUsername()?

php - Symfony 3.4 - 检测到服务的循环引用

postgresql - 如何避免在第一次运行时使用 Doctrine 2 Migrations diff 的 DROP DEFAULT 语句?