Lors de la récupération d'un ensemble de modèles associés, il est souvent utile de les classer d'une manière spécifique. Dans Laravel, cela peut être réalisé en utilisant la méthode orderBy.
Considérez le scénario suivant dans lequel vous parcourez tous les commentaires publiés par l'auteur d'un article particulier :
foreach($post->user->comments as $comment) { echo "<li>" . $comment->title . " (" . $comment->post->id . ")</li>"; }
Ce code affichera la liste de commentaires suivante :
I love this post (3) This is a comment (5) This is the second Comment (3)
Pour trier les commentaires par post ID, étendez la relation hasMany dans le modèle User :
public function comments() { return $this->hasMany('Comment')->orderBy('column'); }
Remplacez la colonne par le nom de la colonne par laquelle vous souhaitez trier. Dans ce cas, nous utiliserons id :
public function comments() { return $this->hasMany('Comment')->orderBy('id'); }
Cela mettra à jour l'ordre des commentaires pour être :
I love this post (3) This is the second Comment (3) This is a comment (5)
Dans En plus de coder en dur l'ordre dans la relation, vous pouvez également trier en fonction d'un paramètre de requête. Pour cela, définissez une route dans votre fichier routes.php :
Route::get('users/{user}/comments', 'UserController@index');
Puis créez une méthode d'index correspondante dans votre UserController :
public function index($user) { $column = Input::get('orderBy', 'defaultColumn'); $comments = $user->comments()->orderBy($column)->get(); // ... }
Lorsque vous visitez la route avec un paramètre orderBy, les commentaires seront classés en conséquence. Par exemple, visiter l'URL suivante classerait les commentaires par colonne create_at :
http://localhost/users/1/comments?orderBy=created_at
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!