2016-02-26 23 views
7

này là của tôiLaravel hùng biện giới hạn và bù đắp

$art = Article::where('id',$article)->firstOrFail(); 
    $products = $art->products; 

Tôi chỉ muốn có một giới hạn 'sản phẩm' Đây là sai cách

$products = $art->products->offset($offset*$limit)->take($limit)->get(); 

Xin vui lòng cho tôi một tay!

Cảm ơn!

+0

điều này sẽ giúp bạn http://stackoverflow.com/questions/27457249/laravel-e loquent-skip-n-take-all – SarangaR

+0

@ SangTrần Chỉ cần sử dụng 'products()' thay vì 'products'. Và nó sẽ hoạt động. –

+0

Như Đoàn Trần đã đề cập, bạn nên gọi những phương pháp đó trên người xây dựng chứ không phải là một bộ sưu tập. Bộ sưu tập không có phương thức 'bỏ qua'. – lagbox

Trả lời

-1

Vui lòng thử như thế này,

return Article::where('id',$article)->with(['products'=>function($products, $offset, $limit) { 
    return $products->offset($offset*$limit)->limit($limit); 
}]) 
+0

Cảm ơn, Nisam nhưng nó không hoạt động. trong DB của tôi, một bài viết có nhiều sản phẩm thông qua bảng 'article_product'. Tôi có thể hiển thị tất cả các sản phẩm (e.g liên quan đến article_id = 1) –

+0

Chức năng ẩn danh không chính xác. – lagbox

1

Bạn có thể sử dụng skiptake chức năng như sau:

$products = $art->products->skip($offset*$limit)->take($limit)->get(); 

// skip nên được thông qua param như giá trị số nguyên để bỏ qua các hồ sơ và chỉ số bắt đầu

// take nhận giá trị số nguyên để nhận số không. các hồ sơ sau khi bắt đầu chỉ số xác định bởi skip

EDIT

Xin lỗi. Tôi đã hiểu lầm với câu hỏi của bạn. Nếu bạn muốn một cái gì đó như phân trang các phương pháp forPage sẽ làm việc cho bạn. phương thức forPage hoạt động cho các bộ sưu tập.

REf : https://laravel.com/docs/5.1/collections#method-forpage

ví dụ

$products = $art->products->forPage($page,$limit); 
+0

Bộ sưu tập không có phương thức 'bỏ qua'. – lagbox

13
skip = OFFSET 
$products = $art->products->skip(0)->take(10)->get(); //get first 10 rows 
$products = $art->products->skip(10)->take(10)->get(); //get next 10 rows 

Từ laravel doc 5,2 https://laravel.com/docs/5.2/queries#ordering-grouping-limit-and-offset

bỏ/mất

Để hạn chế số lượng kết quả trả về từ truy vấn, hoặc bỏ qua một số lượng nhất định các kết quả trong truy vấn (OFFSET), bạn có thể sử dụng bỏ qua và mất phương pháp:

$users = DB::table('users')->skip(10)->take(5)->get();

Trong laravel 5.3 bạn có thể viết (https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset)

$products = $art->products->offset(0)->limit(10)->get(); 
Các vấn đề liên quan