Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]Problem z pobieraniem danych w relacji many-to-many
Forum PHP.pl > Forum > PHP > Frameworki
Kivi
Od niedawna zajmuję się frameworkiem Symfony i natrafiłem na problem.

Otóż mam sobie dwie encje połączone relacją dwukierunkową many-to-many w ten sposób:

  1. /**
  2.  * Tag
  3.  *
  4.  * @ORM\Table(name="tag")
  5.  * @ORM\Entity(repositoryClass="AppBundle\Repository\TagRepository")
  6.  */
  7. class Tag
  8. {
  9. .
  10. .
  11. .
  12.  
  13. /**
  14.   * @ORM\ManyToMany(targetEntity="Note", mappedBy="tags")
  15.   */
  16. private $notes;


  1. /**
  2.  * Note
  3.  *
  4.  * @ORM\Table(name="note")
  5.  * @ORM\Entity(repositoryClass="AppBundle\Repository\NoteRepository")
  6.  */
  7. class Note
  8. {
  9. .
  10. .
  11. .
  12.  
  13. /**
  14.   * @ORM\ManyToMany(targetEntity="Tag", inversedBy="notes", cascade={"persist"})
  15.   * @ORM\JoinTable(name="notes_tags")
  16.   */
  17. private $tags;


Chciałbym stworzyć sobie proste wyszukiwanie po tagach, więc piszę sobie:

  1. if(!empty($data['tags'])) {
  2. $query->andWhere('n.tags = :tag')->setParameter('tag', 6);
  3. }


i otrzymuję błąd:

Cytat
[Semantical Error] line 0, col 46 near 'tags = :tag ORDER': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.


Co i dlaczego robię źle? Z góry dziękuję za pomoc.
nospor
To moze pokaz nam caly kod, a nie wyrwany z kontekstu wycinek. I tym razem postaraj sie nie zepsuc bbcode wink.gif
Kivi
Przepraszam, nie zauważyłem, że edycja rozsypała posta.

Chyba zamieściłem wszystkie potrzebne informacje, tylko błąd je przykrył, chyba, że potrzeba czegoś więcej? Reszta zapytania działa poprawnie, nie działa tylko ten jeden warunek - nie jest istotne co idzie w date, bo na potrzeby testu wrzuciłem tam id istniejącego taga.

EDIT:

Znalazłem rozwiązanie swojego problemu - zamiast porównania należy użyć klauzuli MEMBER OF w ten oto sposób:

  1. if(!empty($data['tags'])) {
  2. $query->andWhere(':tag MEMBER OF n.tags')->setParameter('tag', $data['tags']);
  3. }
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.