檢索一組相關模型時,以特定方式對它們進行排序通常很有用。在 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中文網其他相關文章!