2013-07-09 33 views
117

câu hỏi đơn giản - làm thế nào để đặt hàng qua 'id' giảm dần trong Laravel 4.Laravel 4: làm thế nào để "tự do" sử dụng hùng biện ORM

Phần liên quan của bộ điều khiển của tôi trông như thế này:

$posts = $this->post->all() 

Như tôi hiểu bạn sử dụng dòng này:

->orderBy('id', 'DESC'); 

Nhưng làm thế nào để phù hợp với mã trên của tôi?

+7

Không thể bạn làm như sau: $ posts = $ this-> post-> orderBy ('id', 'DESC') -> get(); –

+0

Vâng, xin lỗi tôi đã gặp sự cố với cú pháp. Cảm ơn - Nếu bạn đăng câu trả lời đó, tôi sẽ chọn nó là câu trả lời đúng. – Josh

+0

Cảm ơn bạn đã đặt câu hỏi. Chính xác là những gì tôi đang tìm kiếm. – Foxinni

Trả lời

204

Nếu bạn đang sử dụng bài như một mô hình (không dependency injection), bạn cũng có thể làm:

$posts = Post::orderBy('id', 'DESC')->get(); 
+1

Đây là cách để đi khi sử dụng phiên bản 4! – Ms01

+1

Vẫn hoạt động trong 5.1 –

+1

cũng hoạt động ở 5.3 –

24

Đây là cách tôi thực hiện.

$posts = $this->post->orderBy('id', 'DESC')->get(); 
46

Nếu bạn đang sử dụng hùng hồn ORM bạn nên xem xét sử dụng phạm vi. Điều này sẽ giữ cho logic của bạn trong mô hình mà nó thuộc về.

Vì vậy, trong mô hình bạn sẽ có:

public function scopeIdDescending($query) 
{ 
     return $query->orderBy('id','DESC'); 
} 

Và bên ngoài mô hình bạn sẽ có:

$posts = Post::idDescending()->get(); 

Thông tin thêm: http://laravel.com/docs/eloquent#query-scopes

+0

truy vấn được chuyển đến 'idDescending() 'ở dòng cuối cùng' $ posts = Post :: idDescending() - > get(); ' –

+3

Laravel tự động phân tích cú pháp. – Puzbie

+0

Tôi sẽ đi với câu trả lời này. Đây là cách tôi làm điều đó bình thường trong công việc hàng ngày của tôi: Trong chế độ: '' 'public scope scopeLatest ($ query) { return $ query-> orderBy ('created_at') -> get(); } '' ' Và trong bộ điều khiển:' '' return view ('project.view') -> với (['projects' => Project :: latest()]); '' ' –

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