Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Doctrine inheritance, Concrete Table Inheritance
Fluke
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 20.09.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam,

mam taką strukturę tabel:
(IMG:http://oi39.tinypic.com/a2xeur.jpg)

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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Fluke
post
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 20.09.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Ale skąd niby Doctrine miałby wiedzieć jakiej klasy jest dany rekord pobierany z bazy?
Go to the top of the page
+Quote Post
Fluke
post
Post #5





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 20.09.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 12:13