Bonjour,

Dans une application, j'ai une relation OneToMany entre deux entités. En l'occurence, Article et Commentaire.
Voici les attributs intéressants de mes entités :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Article {
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
 
    /**
     * @ORM\OneToMany(targetEntity="Commentaire", mappedBy="article")
     * @ORM\OrderBy({"createdAt" = "ASC"})
     */
    protected $commentaires;
 
    /* ... */
}

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Commentaire {
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
 
    /**
     * @ORM\ManyToOne(targetEntity="Article", inversedBy="commentaires")
     * @ORM\JoinColumn(name="article_id", referencedColumnName="id", nullable=false)
     */
    protected $article;
 
    /**
     * @var \DateTime
     *
     * @ORM\Column(type="datetime")
     * @Gedmo\Timestampable(on="create")
     */
    protected $createdAt;
 
    /* ... */
}
J'aimerais récupérer les 3 derniers articles commentés.

Voici en SQL à quoi devrait ressembler ma requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT `topic_id` FROM `comment` GROUP BY `topic_id` ORDER BY `createdAt` DESC LIMIT 3
Via ma console sql, j'obtiens bel et bien ma liste de topic_id.

Mon problème se situe en la traduction de la requête en DQL (Doctrine Query Language).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
public function findByLastCommented($maxResults = 3)
{
	return $this->getEntityManager()
            ->createQuery('SELECT c.article FROM AcmeDefaultBundle:Commentaire c GROUP BY c.article_id ORDER BY c.createdAt DESC')
            ->getResult();
}
Cette méthode provoque une erreur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
[Semantical Error] line 0, col 9 near 'article FROM AcmeDefaultBundle:Comment': Error: Invalid PathExpression. Must be a StateFieldPathExpression.
Je dois avouer que je ne vois pas comment puis-je faire en sorte que ma requête me renvoit la liste des objets Article dernièrement commentés.

Merci d'avance pour votre aide.