2013-08-09 31 views
61

Tôi đang lặp lại tất cả các nhận xét được đăng bởi Tác giả của một bài đăng cụ thể.Thứ tự LarboBằng một mối quan hệ

foreach($post->user->comments as $comment) 
    { 
     echo "<li>" . $comment->title . " (" . $comment->post->id . ")</li>"; 
    } 

này mang lại cho tôi

I love this post (3) 
This is a comment (5) 
This is the second Comment (3) 

Làm thế nào tôi có thể đặt hàng qua các post_id để danh sách trên được ra lệnh như 3,3,5

Trả lời

136

Có thể mở rộng mối quan hệ với truy vấn chức năng:

<?php 
public function comments() 
{ 
    return $this->hasMany('Comment')->orderBy('column'); 
} 

[chỉnh sửa sau nhận xét]

<?php 
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 
    } 
} 

mặc định Mô hình người dùng + ví dụ điều khiển đơn giản; khi nhận được danh sách các bình luận, chỉ cần áp dụng orderBy() dựa trên Input :: get(). (đảm bảo thực hiện kiểm tra đầu vào;)

+2

Ai đó đã đề xuất điều này trên Diễn đàn Laravel, nhưng tôi muốn có thể thực hiện việc này trong Bộ điều khiển để có thể chọn trường nào sắp xếp dựa trên đầu vào của người dùng . Có lẽ tôi nên tôi đã thực hiện điều này rõ ràng hơn trong câu hỏi. – PrestonDocks

+0

Tôi đã thêm một ví dụ thứ hai –

+1

Cảm ơn Rob, bạn đã cho tôi đi đúng hướng. Câu trả lời thực tế là $ comments = User :: find (10) -> comments() -> orderBy ('post_id') -> get(); Dường như nó cần phương thức get() để làm việc. Nếu bạn có thể thêm get() vào câu trả lời của bạn, tôi sẽ đánh dấu nó là câu trả lời được chấp nhận. – PrestonDocks

Các vấn đề liên quan