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 :
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;
/* ... */
} |
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 :
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).
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
[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.
Partager