2016-02-26 5 views
7

Это моепредела Laravel Красноречивых и смещение

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

Я просто хочу взять предел «продукт» Это неправильный путь

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

Пожалуйста, дайте мне руку!

Спасибо!

+0

это поможет вам http://stackoverflow.com/questions/27457249/laravel-e loquent-skip-n-take-all – SarangaR

+0

@ SangTrần Просто используйте 'products()' вместо 'products'. И это сработает. –

+0

Как упоминал Доан Тран, вы должны называть эти методы на строителе, а не на коллекции. В коллекциях нет метода 'skip'. – lagbox

ответ

-1

Пожалуйста, попробуйте, как это,

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

Спасибо, Нисам, но это не работает. в моей БД, статья имеет много продуктов через таблицу «article_product». Я могу показать все продукты (например,g, что связано со статьей_id = 1) –

+0

Анонимная функция неверна. – lagbox

1

Вы можете использовать skip и take функции, как показано ниже:

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

// skip должны быть переданы в качестве параметров целое значение, чтобы пропустить записи и начальный индекс

// take получает целочисленное значение, чтобы получить значение no. записей после запуска индекса, определяемого skip

EDIT

Sorry. Я был неправильно понял ваш вопрос. Если вы хотите что-то вроде разбивки на страницы, то метод forPage будет работать на вас. Метод forPage работает для коллекций.

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

например

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

Коллекции не имеют метода 'skip'. – 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 

Из Laravel док 5,2 https://laravel.com/docs/5.2/queries#ordering-grouping-limit-and-offset

пропуском/принять

Чтобы ограничить количество результатов, возвращаемых из запроса, или пропустить заданное число результатов в запросе (OFFSET), вы можете использовать пропустить и принять методы:

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

В Laravel 5,3 вы можете написать (https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset)

$products = $art->products->offset(0)->limit(10)->get(); 
Смежные вопросы