Kdyby/Doctrine a dědičnost

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Azathoth
Člen | 495
+
0
-

Zdravím,

mám problém s Doctrine: mám entity: abstract class A, class B extends Class A, class C extends Class B, class D extends class A. V anotaci ke třídě A mám:

/**
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({
 * "a" = "A",
 * "b" = "B",
 * "d" = "D",
 * })
 */

a ve třídě B mám:

/**
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({
 * "b" = "B",
 * "c" = "C"
 * })
 */

A problém je v tom, že když si uložím do databáze objekt třídy C, tak do sloupce discr v tabulce třídy A se mi narve “c”. Ale proč? A jak mám správně vyřešit takovouto zřetězenou dědičnost?

Těším se na odpovědi.

P.S.: Existuje nějaký anglický pojem pro takovouto zřetězenou dědičnost? Multiple inheritance jaksi není ono a na jiné pojmy jsem nenarazil.

Editoval Azathoth (26. 8. 2014 19:08)

Majkl578
Moderator | 1364
+
+1
-

Dědičnost entit se definuje pouze na nejvyšší společné entitě. Ostatní obsahují pouze @ORM\Entity.

Existuje nějaký anglický pojem pro takovouto zřetězenou dědičnost?

Class Table Inheritance.
http://docs.doctrine-project.org/…mapping.html

Mimochodem, s Nette dotaz nesouvisí.

Azathoth
Člen | 495
+
0
-

O Class Table vím, ale to moc nepopisuje ten problém s tím C extends B, B extends A. Myslel jsem, jestli existuje oběcně pro tuhle dědičnost nějaký pojem v PHP.
A jak to má fungovat? Když v tabulce a je ve sloupci discr c, tak jak má ten objekt C uložené properties, které jsou definované v B?
Já vím, že to nesouvisí s Nette, ale souvisí to s Kdyby/Dosctrine, tak proto se ptám tady, v pluginech.