Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Doctrine inheritance
Forum PHP.pl > Forum > PHP
Fluke
Witam,

mam taką strukturę tabel:


Teraz moje pytanie, czy w jakiś sposób Doctrine 2 pozwala na takie dziedziczenie ale bez podawania discriminator column ?
Aby mieć taki kod:

  1. /**
  2.  * @MappedSuperclass
  3.  */
  4. abstract class Person
  5. {
  6. public $id;
  7. public $name;
  8. public $surname;
  9. }
  10.  
  11. /**
  12.  * @Entity
  13.  */
  14. class Student extends Person
  15. {
  16. public $rok;
  17. }
  18.  
  19. /**
  20.  * @Entity
  21.  */
  22. class Profesor extends Person
  23. {
  24. public $wykladow;
  25. }


Z góry dzięki i pozdrawiam smile.gif
Crozin
1. Kolumna pozwalająca na rozróżnienie typu musi się pojawić. Co najwyżej można pominąć zdefiniowanie jej możliwych wartości, wtedy zostanie użyta nazwa klasy danego obiektu, ale to bardzo złe rozwiązanie w większości wypadków.
2. Tutaj nie powinieneś w ogóle korzystać z dziedziczenia. Ani profesor, ani student nie jest wyspecjalizowaną formą osoby. Oba te obiekty powinny mieć co najwyżej relację jeden-do-jednego z obiektem PersonalInformation zawierającym imię, nazwisko i resztę danych.
Fluke
Tutaj dałem taki szybki przykład. Chciałem zrobić na takiej zasadzie, że pobieramy konkretny obiekt i za pomocą INNER JOIN pobieramy resztę danych, które dziedziczymy. I tutaj nie chciałem, robić discriminator kolumn, tylko po dziedziczeniu wiemy, z jakiej kolumny jeszcze musimy pobrać dodatkowe dane
Crozin
Ale skąd niby Doctrine miałby wiedzieć jakiej klasy jest dany rekord pobierany z bazy?
Fluke
  1. /**
  2.  * @Entity
  3.  * @Table(name="person")
  4.  * @MappedSuperclass
  5.  */
  6. abstract class Person {
  7. /**
  8.   * @Id
  9.   * @Column(type="integer")
  10.   * @GeneratedValue(strategy="AUTO")
  11.   */
  12. protected $id;
  13. }
  14.  
  15. /**
  16.  * @Entity
  17.  * @Table(name="student")
  18.  */
  19. class Student extends Person {
  20.  
  21. }


I teraz w klasie Student dodać odpowiednią adnotację. Tylko, że nie wiem czy takie coś istnieje w doctrine. Ale uważam, że jest to sensowne.
Crozin
Dokumentacja jest całkiem przyzwoita - http://docs.doctrine-project.org/en/latest...ce-mapping.html - i jasno stwierdza, że jeżeli chcesz otrzymać dziedziczenie encji (zarządzanej przez Doctrine) musisz zdefiniować owe dziedziczenie.
Ponawiam pytanie: co chcesz dokładnie osiągnąć i dlaczego nie chcesz skorzystać po prostu z @DiscriminatorMap?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.