4 votes

Sous-requête hasMany de Laravel

J'ai une relation laravel hasMany et je veux récupérer les 10 derniers commentaires d'une table et les classer par ordre décroissant. Voici à quoi ressemble ma table

id  |   user_id |   comment_text
----------------------------------------------------------
1       30          foo
2       23          bar
3       17          hello
4       30          world
5       12          lorem
6       10          ipsum
7       17          dummy

Mes résultats devraient être

id  |   user_id |   comment_text
----------------------------------------------------------
5       12          lorem
6       10          ipsum
7       17          dummy    

Comment j'exécute la requête pour obtenir les résultats attendus

SELECT * FROM (
    SELECT * FROM comments ORDER BY id DESC LIMIT 3
) sub
ORDER BY id ASC

Comment puis-je faire cela dans un modèle laravel ? Puis-je exécuter une sous-requête dans une relation ? Voici ma mise en œuvre jusqu'à présent

public function latestComments($limit = 3)
  {
    return $this->hasMany(Comment::class)     
      ->orderByDesc('id')
      ->limit($limit);
  }

2voto

Nikola Gavric Points 3122

Vous êtes sur la bonne voie, il suffit de la corriger un peu :

public function latestComments($limit = 3)
{
     return $this->hasMany(Comment::class)     
        ->orderBy('id', 'desc')
        ->take($limit);
}

Vous pouvez lire la suite de take y orderBy sur documents officiels

0voto

sammyukavi Points 958

J'ai trouvé une solution. En utilisant la fonction reverse je suis capable d'obtenir les résultats souhaités, tout ce que je dois faire est d'appeler reverse sur la propriété.

$post->latestComments->reverse()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X