2011-10-10 9 views
7

Załóżmy, że mam aplikację blogową.
Autor może dodać wiele zdjęć do wpisu, podając link do adresu URL istniejącego obrazu w Internecie lub przesłać nowy obraz.Jak mogę wykonywać złożone zapytania o powiązania encji w doktrynie 2? (jednostka wirtualna)

Chcę móc przywrócić ścieżkę z obrazu (przesłanego lub adresu URL) do wszystkich postów, które używa tego obrazu, oraz z konkretnego wpisu do wszystkich obrazów w tym poście (na przykład - tak, żebym mógł usunąć obrazy, które są nielegalne i/lub zawieszają wpis, który ich używa, dopóki autor nie usunie postu).

Używam jednak różnych elementów do przesłanego obrazu w porównaniu z obrazem URL - przesłany obraz zawiera więcej danych dotyczących obrazu niż obrazu URL.

Skutkuje to bardziej złożonym kodem, ponieważ przy każdym zapisie edytowanego wpisu muszę sprawdzić, który rodzaj jest obrazem (ze wszystkich obrazów w poście, które muszę przejechać), a następnie utworzyć lub zaktualizować rekordu i przypisać do pola relacji w jednostce pocztowej.

... Więc zakładając Mam UploadedImage a UrlImage podmioty, myślałem o posiadanie setImages sposób w jednostce post, który sprawdza za każdym obrazie robi się, jeśli jest dodany lub adres URL, a następnie wywołuje albo setUploadedImages lub setUrlImages.

Potrzebuję jednak jakiegoś wirtualnego repozytorium images, aby załadować obrazy w ten sam sposób.

Brzmi to nieco skomplikowane, a ja zastanawiałem się:

  1. Jak mogę mieć wirtualny podmiot doktrynę (z repozytorium i wszystko)?
  2. Czy jest lepszy projekt?
+3

Czy rozważałeś użycie [Mapowania dziedziczenia] (http://www.doctrine-project.org/docs/orm/2.1/en/reference/inheritance-mapping.html)? – Orbling

+0

@Organizowanie w jaki sposób? I jak rozwiąże "problem" decydowania o tym, co zrobić z każdym typem? – Doron

+0

Cóż, używając Mapowania dziedziczenia, możesz mieć superklasę, która reprezentuje oba typy, a następnie mogą być obsługiwane razem. Mogą mieć te same metody i robić różne rzeczy w zależności od podtypu. – Orbling

Odpowiedz

2

Oto dokumentacja za to, co staramy się robić:
http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

Opisuje pojedynczej tabeli dziedziczenie vs tabeli klasy dziedziczenia. Twoja sprawa jest odpowiednia dla tej ostatniej, ale rozważ także migrację do dziedziczenia z jedną tabelą.

Jeśli (kod) użytkownicy tych zdjęć traktują je tak samo niezależnie od ich pochodzenia, złożoność zapytania i wykorzystanie bazy danych nie będą warte normalizacji.

Powiązane problemy