Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Doctrine2 komentarze
Forum PHP.pl > Forum > PHP > Object-oriented programming
Piotrkus
Witam,


Posiadam obiekty: artykuły, produkty, itp. Każdy z nich może mieć komentarze.


mógłbym zrobić tabele artcomment , productcomment,itp
i odpowiednio utworzyć relacje Many-To-one

Ale jak zrobić by zamiast artcomment , productcomment , była po prostu jedna tabela comment ? I posiadała relacje z (artykułem lub produktem, musiałyby być unikalne pola id dla tych dwóch tabel).


Mam nadzieje, że w dość zrozumiały sposób przedstawiłem mój problem.
Pozdrawiam
MitS
w tabeli comment utworz klucze obce (z opcją allow null) product_id, art_id.
Jesli komentarz bedzie tyczyc sie produktu to pole product_id bedzie mialo id zas art_id bedzie NULL.
Orzeszekk
Napisales ze z artykulem lub produktem, jezeli jeden komentarz nie moze sie odnosic zarowno do artykulu jak i do produktu to niech tabela comment ma jedną kolumnę z ID_komentowanego_obiektu, a druga kolumna w comment niech bedzie tinyint( watpie bys mial wiecej jak 256 typow a zawsze to pare bajtow do przodu), i niech oznacza typ komentarza (artykul/produkt).

jezeli moga sie odwolywac na raz do dwoch to tak jak kolega wyzej napisal.

Pozniej wystarczy zapisac artykul i produkt jako stałą np artykul_type=1 produkt_type=2.

Do obiektu rysujacego komentarze to juz twoja wola jak zrobisz. Jesli rysujesz je tak samo to po prostu przekazujesz obiektowi parametr type, a jezeli w rozny sposob to robisz 2 obiekty rysujace i 3 go nadzorce ktory zwraca odpowiedni obiekt w zaleznosci od typu.
ano
Cytat(Orzeszekk @ 5.12.2011, 04:11:40 ) *
Napisales ze z artykulem lub produktem, jezeli jeden komentarz nie moze sie odnosic zarowno do artykulu jak i do produktu to niech tabela comment ma jedną kolumnę z ID_komentowanego_obiektu, a druga kolumna w comment niech bedzie tinyint( watpie bys mial wiecej jak 256 typow a zawsze to pare bajtow do przodu), i niech oznacza typ komentarza (artykul/produkt).

jezeli moga sie odwolywac na raz do dwoch to tak jak kolega wyzej napisal.

Pozniej wystarczy zapisac artykul i produkt jako stałą np artykul_type=1 produkt_type=2.

Do obiektu rysujacego komentarze to juz twoja wola jak zrobisz. Jesli rysujesz je tak samo to po prostu przekazujesz obiektowi parametr type, a jezeli w rozny sposob to robisz 2 obiekty rysujace i 3 go nadzorce ktory zwraca odpowiedni obiekt w zaleznosci od typu.


Oj lekko mówiąc niezbyt to zgodne z modelem relacyjnych baz danych. ohmy.gif
I Doctrine na coś takiego nie pozwoli.

@Piotrkus - zrób tak jak napisał @Mits.

Czyli:
1. w mapowaniu "article":
  1. oneToMany:
  2. comments:
  3. targetEntity: Comment
  4. mappedBy: article


2. w mapowaniu "product":
  1. oneToMany:
  2. comments:
  3. targetEntity: Comment
  4. mappedBy: product


3. w mapowaniu "comments":
  1. manyToOne:
  2. article:
  3. targetEntity: Article
  4. inversedBy: comments
  5. product:
  6. targetEntity: Product
  7. inversedBy: comments


Dzięki temu będziesz mógł z komentarza dostać się do artykułu/produktu i na odwrót (relacja dwustronna)
article->getComments();
comment->getArticle();
coś w tym stylu.
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.