Hola amigos, sigo con mi aprendizaje de symfony y para ello está vez estoy creando un blog. tengo 5 entidades Post, Category, Tag, Comment y User, con sus respectivas relaciones, el problema lo tengo únicamente cuando trato de traerme todos los posts, con un tag concreto, y además traer, la categoría al que pertenece, los comentarios y el usuario. Os dejo las dos entidades y el repositorio:
Post:
/** * @ORM\ManyToMany(targetEntity="Tag", inversedBy="posts") * @ORM\JoinTable(name="posts_tags") **/ private $tags;
Tag:
/** * @ORM\ManyToMany(targetEntity="Post", mappedBy="tags") **/ private $posts;
Repository:
public function findByTags($tags) { return $this->getEntityManager() ->createQuery( 'SELECT p, c, u, t, m FROM PostBundle:Post p INNER JOIN p.category c INNER JOIN p.user u LEFT JOIN p.tags t LEFT JOIN p.comments m WHERE p.tags = :tags' )->setParameter('tags', $tags)->getResult(); }
El error es el siguiente:
[Semantical Error] line 0, col 178 near 'tags = :tags': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.
deciros que en el caso de las categorías hago servir el mismo código, pero pasando $category y funciona, imagino que tiene que ver con la relación MayToMay, pero por más que he revisado la documentación y consultas diversas no doy con el problema. Gracias.
Respuestas
Hola amigos, al final di con la solución la cuelgo por si a alguien le fuera de ayuda en un futuro. el problema estaba en "WHERE",
public function findByTags($tags) { return $this->getEntityManager() ->createQuery( 'SELECT p, t, c, u FROM PostBundle:Post p LEFT JOIN p.tags t INNER JOIN p.category c INNER JOIN p.user u WHERE t.id = :tags ORDER BY p.createdAt DESC' )->setParameter('tags', $tags)->getResult(); }
@casasxavi