Laravel:使用 orderBy 对关系进行排序
在 Laravel 中处理关系时,以特定方式对结果进行排序可能很有用。例如,您可能希望按时间顺序显示与帖子相关的评论。
考虑以下循环,它会迭代特定帖子的作者发布的所有评论:
foreach($post->user->comments as $comment) { echo "<li>" . $comment->title . " (" . $comment->post->id . ")</li>"; }
此循环可能会产生如下输出:
I love this post (3) This is a comment (5) This is the second Comment (3)
要按 post_id 对列表进行排序,您可以将评论关系扩展为orderBy 函数:
public function comments() { return $this->hasMany('Comment')->orderBy('column'); }
现在,当您循环浏览评论时,它们将以所需的顺序显示:
This is the second Comment (3) I love this post (3) This is a comment (5)
或者,您可以使用更灵活的方法orderBy 函数作为输入,类似于 Input::get() 输入检查示例:
class User { public function comments() { return $this->hasMany('Comment'); } } class Controller { public function index() { $column = Input::get('orderBy', 'defaultColumn'); $comments = User::find(1)->comments()->orderBy($column)->get(); // use $comments in the template } }
通过传递 orderBy 列作为输入,您可以根据用户输入动态对评论进行排序。请记住出于安全目的实施适当的输入检查。
以上是如何在 Laravel 中排序 Eloquent 关系?的详细内容。更多信息请关注PHP中文网其他相关文章!