Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

[SOLUCIONADO] Problemas con consulta dql

17 de mayo de 2016

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

#1

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

20 mayo 2016, 23:39