Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Doctrine] Relacja m2m z dodatkowymi parametrami
Forum PHP.pl > Forum > PHP > Frameworki
seth-kk
Witam
Czy w Doctrine da się na poziomie YAML stworzyć relację many 2 many z dodatkowy parametrem?
Przykład
  1. Tag:
  2. tableName: tags
  3. COLUMNS:
  4. id:
  5. type: integer
  6. PRIMARY: true
  7.  
  8. TagsReferences:
  9. tableName: tags_references
  10. COLUMNS:
  11. tag_id:
  12. type: integer
  13. PRIMARY: true
  14. table_name:
  15. type: string(50)
  16. PRIMARY: true
  17. table_id:
  18. type: integer
  19. PRIMARY: true
  20.  
  21. SomeTable:
  22. tableName: some_table
  23. COLUMNS:
  24. id:
  25. type: integer
  26. PRIMARY: true
  27. # ...

Czy da się zbudować referencje dla SomeTable tak aby wyciągała tagi podobnym zapytaniem
  1. SELECT * FROM tags t
  2. JOIN tags_references r ON (t.id = r.tag_id AND r.table_name = 'some_table')
  3. WHERE r.table_id = ?

Czy Doctrine przewiduje taką możliwość?
Crozin
Musisz stworzyć najpierw relację 1-n pomiędzy Tag a TagTableReference, a następnie relację n-1 pomiędzy TagTableReference a Table.
seth-kk
Dzięki Crozin za odpowiedź ale nie do końca o to chodzi. Wiem jak wymodelować relację many 2 many ale nie wiem jak wpleść tam dodatkowy warunek. Będę wdzięczny za jakiś przykład i/lub sprowadzenie na właściwą drogę
Crozin
Ahh.. w takim razie:
Kod
JOIN t.tableReferences r WITH r.tableName = ?
Mephistofeles
Ja to zrobiłem tworząc 2 relacje, z tabeli A do B, i z C do B, ale trochę to utrudnia życie, bo trzeba się odwoływać np. A->B->C, zamiast A->C, da się coś takiego zrobić przezroczyście, nie odwołując się do tej dodatkowej tabeli? Oczywiście chodzi o dodatkowe pola w tabeli B, normalnie to wiem jak.
seth-kk
@Mephistofeles: zdaje się refClass jest odpowiedzią na twoje pytanie
@Crozin: Dokładnie to tylko na poziomie modeli (Doctrine_Record) a nie Doctrine_Query. Jeśli jest to niemożliwe to napiszcie - pokombinuję z getterami i setterami
Mephistofeles
No właśnie mówię, że normalnie wiem jak to zrobić, ale chcę dołączyć do tego dodatkowe pole - potrzebuję relacji w stylu użytkownicy - produkty, ale z dodatkowym polem ilość. Da się to zrobić bez takich obejść jak pisałem?
seth-kk
@Mephistofeles: skoro to dodatkowe pole nie mające wpływu na relację to prosty filtr po którejś stronie powinien wystarczyć
Mephistofeles
Da się ustawić filtr z poziomu schema w Yamlu, czy jednak muszę przeciążać setUp?
seth-kk
@Mephistofeles: Nie spotkałem się

Co do mojego pytania to odpowiedzią jest potomek typu column_aggregation użyty jako refClass
  1. Local_Reference:
  2. inheritance:
  3. extends: Reference
  4. type: column_aggregation
  5. keyField: GROUP
  6. keyValue: 1
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.