Раньше я просто выполнял запрос, который выбирал какое-то поле и некоторые условия. Эта строка кода дает мне правильный результат.
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
Я не понимаю, как реализовать разбиение на страницы.
Кто-нибудь может мне помочь?






Это задокументированное изменение в 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 вы можете сделать это, как я делал это выше return view('dashboard')->compact('links'); , и скажите мне, какую ошибку вы получите
@ user1687891 - "но я получаю ошибку" ... что там написано?
Недействительный аргумент для foreach ()
хорошо, вы можете вывести $ links в методе вашего контроллера следующим образом: dd ($ links) и сообщить нам возвращенный результат
#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, как и говорит Магнус, удалите json_decode(), просто используйте метод compact laravel, как я написал в своем ответе
@utdev, если я использую compact, я получаю Метод Illuminate \ View \ View :: compact не существует.
@ user1687891 ххмм странно, я обновляю свой ответ альтернативой компактному, попробуйте, пожалуйста
@utdev laravel сегодня ведет себя как-то странно .. спасибо за помощь
@ user1687891 У меня была опечатка в моем ответе, вы могли бы попробовать использовать compact против этого return view('dashboard', compact('links'));
Вы должны использовать
paginate()вместоget(), поэтому, если вы удалите->get()из этого запроса, он должен работать. laravel.com/docs/5.7/pagination