2014-04-16 12 views
5

Już wiem, jak uzyskać nazwy pól dla encji, ale jak uzyskać nazwy klas dla wszystkich skojarzeń?Doctrine pobiera wszystkie nazwy pól ze skojarzeniami

$em->getClassMetadata('Product')->getFieldNames(); 

Ta właściwość dostaje tylko klasy, ale spodziewać się nazwy asocjacji wewnątrz zagnieżdżonej tablicy, na przykład, jeśli ja mam klienta związanego z produktem chciałbym, aby wszystkie nazwy właściwości klasy klient zbyt.

+0

nie można iteracyjne nad stowarzyszeniami danych i poprosić ich meta danych, jak również ? –

Odpowiedz

9

można uzyskać różnymi nazwami pól, jak również następnie połączyć je

$properties = $em->getClassMetadata('YourBundle:Product')->getFieldNames(); 
$output = array_merge(
       $properties, 
       $em->getClassMetadata('YourBundle:Product')->getAssociationNames() 
); 
0

tylko trochę podpowiedź.

Wolałbym restrukturyzację sposobu organizacji schematu w celu poprawnego pobrania wszystkich powiązanych pól. Na przykład zgodnie z tą linią twojego pytania "jeśli mam klienta powiązanego z produktem", wierzę, że masz co najmniej jeden do jednego lub jeden do wielu relacji między klientem a produktem. Jeśli zadeklarujesz te relacje w ORM, jeśli użyjesz YAML lub adnotacji lub jakikolwiek preferowany/ustąpi, będziesz mógł pobrać nazwy pól za pomocą standardowego zapytania DQL/lub uzyskać metody.

Punkt zaczerpnięty stąd polega na tym, że gdy oczekuje się, że pola zostaną skojarzone, najlepiej jest ustanowić stały schemat bazy danych poprzez zapewnienie odpowiednich relacji na pierwszym miejscu. Spowoduje to zmniejszenie pracy o połowę i zwiększy wydajność w praktyce systemowej/kodowania na dłuższą metę.

Mam nadzieję, że to pomoże, Pozdrawiam!

0

Skończyłem scalanie ich w jedną tablicę, otrzymując najpierw nazwę każdego asocjacji, a następnie nazwy pól dla każdej nazwy.

1

One liner:

array_keys (entityManager-> getMetadataFactory() $ -> getMetadataFor ($ podmiot) -> reflFields)

Powiązane problemy