检索一组相关模型时,以特定方式对它们进行排序通常很有用。在 Laravel 中,这可以使用 orderBy 方法来实现。
考虑以下场景,其中您循环遍历特定帖子的作者发布的所有评论:
foreach($post->user->comments as $comment) { echo "<li>" . $comment->title . " (" . $comment->post->id . ")</li>"; }
此代码将显示以下列表comments:
I love this post (3) This is a comment (5) This is the second Comment (3)
要按帖子 ID 对评论进行排序,请扩展 User 模型中的 hasMany 关系:
public function comments() { return $this->hasMany('Comment')->orderBy('column'); }
将 column 替换为您要排序的列的名称。在本例中,我们将使用 id:
public function comments() { return $this->hasMany('Comment')->orderBy('id'); }
这会将评论的顺序更新为:
I love this post (3) This is the second Comment (3) This is a comment (5)
中除了对关系中的顺序进行硬编码之外,您还可以基于查询参数进行排序。为此,请在您的routes.php文件中定义一个路由:
Route::get('users/{user}/comments', 'UserController@index');
然后在您的UserController中创建相应的索引方法:
public function index($user) { $column = Input::get('orderBy', 'defaultColumn'); $comments = $user->comments()->orderBy($column)->get(); // ... }
当您使用orderBy参数,评论将相应地排序。例如,访问以下 URL 将按created_at 列对评论进行排序:
http://localhost/users/1/comments?orderBy=created_at
以上是如何在 Laravel 中使用'orderBy”订购相关模型?的详细内容。更多信息请关注PHP中文网其他相关文章!