Как добавить в запрос нумерацию страниц?

Раньше я просто выполнял запрос, который выбирал какое-то поле и некоторые условия. Эта строка кода дает мне правильный результат.

public function index()
{
    // Get links
    $links = Link::select('id', 'url', 'short_url', 'counter', 'expired_on')
        ->orderBy('id', 'desc')
        ->where('delete_flg', 0)
        ->get();

    // Return data
    return view('dashboard')->with(
        array(
            'links' => json_decode($links),
            'current_datetime' => Carbon::now()
        )
    );
}

Теперь я хочу реализовать разбиение на страницы в строке выше.

$links = Link::select('id', 'url', 'short_url', 'counter', 'expired_on')
    ->orderBy('id', 'desc')
    ->where('delete_flg', 0)
    ->get()->paginate(2);

Когда я пытаюсь использовать paginate (2) в конце, я получаю сообщение об ошибке:

Method Illuminate\Database\Eloquent\Collection::paginate does not exist.

Итак, из другого учебника, который я пробовал без -> get (), а затем разбивать на страницы Тогда я получаю такую ​​ошибку.

count(): Parameter must be an array or an object that implements Countable

Я не понимаю, как реализовать разбиение на страницы.

Кто-нибудь может мне помочь?

Вы должны использовать paginate() вместо get(), поэтому, если вы удалите ->get() из этого запроса, он должен работать. laravel.com/docs/5.7/pagination

Magnus Eriksson 10.10.2018 12:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это задокументированное изменение в PHP 7.2. Вам нужно либо обновить Laravel до версии 5.6+, либо понизить версию PHP до версии 7.1.

Кроме того, вы должны использовать paginate() без ->get(), вам также следует взглянуть на пагинационная документация.

Ответ принят как подходящий

Вы можете просто сделать следующее:

$links = Link::select('id', 'url', 'short_url', 'counter', 'expired_on')
            ->orderBy('id', 'desc')
            ->where('delete_flg', 0)
            ->paginate(2);

paginate уже действует как ->get()

И вот как вы возвращаете данные / коллекцию в свое представление:

// return data
return view('dashboard', compact('links'));

Альтернатива компактному:

return view('dashboard')->with([
    'links' => $links
]);

Затем, по вашему мнению, вы можете делать с данными все, что хотите:

@foreach($links as $link)
    <p>{{ link }}</p>
@endforeach

да, я удалил get (), а затем использовал return view ('dashboard') -> with (array ('links' => json_decode ($ links), 'current_datetime' => Carbon :: now ())); но я получаю ошибку

user1687891 10.10.2018 12:43

@ user1687891 вы можете сделать это, как я делал это выше return view('dashboard')->compact('links'); , и скажите мне, какую ошибку вы получите

utdev 10.10.2018 12:44

@ user1687891 - "но я получаю ошибку" ... что там написано?

Magnus Eriksson 10.10.2018 12:45

Недействительный аргумент для foreach ()

user1687891 10.10.2018 12:45

хорошо, вы можете вывести $ links в методе вашего контроллера следующим образом: dd ($ links) и сообщить нам возвращенный результат

utdev 10.10.2018 12:46

#items: Collection {# 256 ▼ #items: array: 2 [▼ 0 => Link {# 258 ▼ #table: "links" + primaryKey: "id" #fillable: array: 3 [▶] #connection: "mysql) "#keyType:" int "+ incrementing: true #with: [] #withCount: [] #perPage: 15 + exists: true + wasRecentlyCreated: false #attributes: array: 5 [▼" id "=> 18" url " => "fff.com" "short_url" => "FeURjm" "counter" => 0 "expired_on" => "2020-10-10 17:04:00"]

user1687891 10.10.2018 12:49

@ user1687891, как и говорит Магнус, удалите json_decode(), просто используйте метод compact laravel, как я написал в своем ответе

utdev 10.10.2018 12:51

@utdev, если я использую compact, я получаю Метод Illuminate \ View \ View :: compact не существует.

user1687891 10.10.2018 12:53

@ user1687891 ххмм странно, я обновляю свой ответ альтернативой компактному, попробуйте, пожалуйста

utdev 10.10.2018 12:57

@utdev laravel сегодня ведет себя как-то странно .. спасибо за помощь

user1687891 10.10.2018 13:01

@ user1687891 У меня была опечатка в моем ответе, вы могли бы попробовать использовать compact против этого return view('dashboard', compact('links'));

utdev 10.10.2018 13:03

Другие вопросы по теме