Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 24.08.2016 16:57:01

Alex_01

Laravel pagination total

Здравствуйте.
Столкнулся с проблемой. Есть вот такой код

$products = Product::where('category_id', $category->id)->paginate(7);

Если далее работать с переменной $products, то в ней находится 7 товаров из 30, а как получить все 30 товаров?

#2 24.08.2016 18:00:43

Re: Laravel pagination total

Alex_01 пишет:

Здравствуйте.
Столкнулся с проблемой. Есть вот такой код

$products = Product::where('category_id', $category->id)->paginate(7);

Если далее работать с переменной $products, то в ней находится 7 товаров из 30, а как получить все 30 товаров?

$products = Product::where('category_id', $category->id)->get();

вроде логично

Не в сети

#3 24.08.2016 18:36:14

Alex_01

Re: Laravel pagination total

hzone пишет:
Alex_01 пишет:

Здравствуйте.
Столкнулся с проблемой. Есть вот такой код

$products = Product::where('category_id', $category->id)->paginate(7);

Если далее работать с переменной $products, то в ней находится 7 товаров из 30, а как получить все 30 товаров?

$products = Product::where('category_id', $category->id)->get();

вроде логично

Логично это да) Мне нужно оставить пагинацию,и получить при этом все товары, т.к. после выше представленного кода идет вот этот

$ids = $products->lists('id');
$brands = $this->brands($ids);

А все вместе выглядит так

    public function showCategory($slug)
    {
        $category = Category::with('catalogs')->FindBySlug($slug);
        $products = Product::where('category_id', $category->id)->paginate(7);
        $ids = $products->lists('id');
        $brands = $this->brands($ids);
        return view('category', compact('category', 'brands', 'products'));
    }

    public function brands($ids = [])
    {
        return Brand::whereHas('products', function($q) use($ids)
        {
            $q->whereIn('id', $ids);
        }
        )->get();
    }
}

Вот и получается что не все производители выходят,а только те которые на 1 странице с товарами

#4 24.08.2016 18:49:10

Re: Laravel pagination total

Можно сделать так:

$products = Product::where('category_id', $category->id)->paginate();

После чего пагинацию можно выводить с помощью перечисленных здесь методов (см. Additional paginate methods). Список можно получить из $products:

$ids = $products->pluck('id');

Не используйте lists(), он был deprecated в 5.2 и в 5.3 он уже не работает. Используйте pluck() вместо него.

Изменено AlexeyMezenin (24.08.2016 18:52:35)

Не в сети

#5 24.08.2016 20:18:00

Alex_01

Re: Laravel pagination total

AlexeyMezenin пишет:

Можно сделать так:

$products = Product::where('category_id', $category->id)->paginate();

После чего пагинацию можно выводить с помощью перечисленных здесь методов (см. Additional paginate methods). Список можно получить из $products:

$ids = $products->pluck('id');

Не используйте lists(), он был deprecated в 5.2 и в 5.3 он уже не работает. Используйте pluck() вместо него.

Спасибо, попробую с вашим способом.

#6 26.08.2016 13:32:47

Alex_01

Re: Laravel pagination total

AlexeyMezenin пишет:

Можно сделать так:

$products = Product::where('category_id', $category->id)->paginate();

После чего пагинацию можно выводить с помощью перечисленных здесь методов (см. Additional paginate methods). Список можно получить из $products:

$ids = $products->pluck('id');

Не используйте lists(), он был deprecated в 5.2 и в 5.3 он уже не работает. Используйте pluck() вместо него.

Не выходит. Пробую так

$products = Product::where('category_id', $category->id)->paginate();

а потом во вью

{!! $products->render(7) !!}

И он выкидывает ошибку

Argument 1 passed to Illuminate\Pagination\LengthAwarePaginator::render() must be an instance of Illuminate\Contracts\Pagination\Presenter, integer given, called in W:\domains\hotprice.app\storage\framework\views\0cb26ddbe658867c1a11b3344b301698ecfde7f4.php on line 103 and defined (View: W:\domains\demo.app\resources\views\category.blade.php)

#7 26.08.2016 14:12:22

Re: Laravel pagination total

а потом во вью

{!! $products->render(7) !!}

И он выкидывает ошибку

Я написал выше, что при таком способе нужно использовать другие методы для отрисовки пагинации, они перечислены по ссылке выше. Либо делать свой класс, который реализовывает Illuminate\Contracts\Pagination\Presenter и передавать его в render(). Дело в том, что если использовать путь, описанный мной выше, в переменной хранится объект Illuminate\Pagination\LengthAwarePaginator вместо Illuminate\Pagination\Paginator, который получаешь при использовании стандартной пагинации (->paginate(15)). См. здесь подробнее.

Изменено AlexeyMezenin (26.08.2016 15:34:29)

Не в сети

#8 26.08.2016 15:25:50

Re: Laravel pagination total

Алексей, давай, пожалуйста, ссылки на русскую документацию, т.к. здесь подавляющее большинство английский не знает. Тем более вся документация переведена вплоть до 5.2.

https://laravel.ru/docs/v5/pagination#ручное

Не в сети

#9 26.08.2016 15:33:58

Re: Laravel pagination total

Proger_XP пишет:

}%Алексей, давай, пожалуйста, ссылки на **русскую** документацию, т.к. здесь подавляющее большинство английский не знает. Тем более вся документация переведена вплоть до 5.2.

((https://laravel.ru/docs/v5/pagination#ручное https:~//laravel.ru/docs/v5/pagination#ручное))

Хорошо, буду на русскую давать.

Не в сети

Подвал раздела