Отображение наследования доктрины с абстрактным базовым классом

У меня есть вопрос о стратегиях сопоставления доктрин.

Существует два способа достижения наследования: 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 выполняет более 8 000 вызовов. Так что я думаю, что что-то не так с моим отображением.

Я не могу использовать MappedSuperClasses, потому что мне определенно нужны отношения oneToMany. Я думаю, что проблема заключается в том, что классы A и D не являются частью дискриминатораMap, и эта доктрина не может правильно отображать отношения. Но A и D не являются обычным сущностью, потому что они просто предоставляют основные атрибуты.

Как я могу достичь этого, не получая более 8 000 запросов SELECT доктрины?

Спасибо!

1 ответ

По моему опыту, использование класса Наследование классов хорошо подходит для такого типа ассоциации.

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

В документации указано, что влияние этой стратегии влияет на производительность, но я не могу поверить, что она будет генерировать 8000 запросов SELECT.

licensed under cc by-sa 3.0 with attribution.