count(): параметр должен быть массивом или объектом, который реализует счетную ошибку в проекте
В настоящее время я работаю над проектом Laravel и следую за курсом. Все шло отлично, пока мне не пришлось добавить "красноречивый" в мой проект. Этот пакет работает просто отлично, но теперь я получаю следующую ошибку в моем проекте:
count(): параметр должен быть массивом или объектом, который реализует счетное
Я использую эту функцию count() на мой взгляд:
@if($comments->count() > 0)
@forech($comments as $comment)
//displaying single comment data
@endforeach
@endif
Теперь мой вопрос: почему эта ошибка отображается сейчас? Может ли это быть потому, что я сделал "обновление композитора" в своем проекте, и он обновил мою версию PHP до 7.2, и в этой версии есть проблема count()? Я предполагаю, что знак ">=" изменил мою версию PHP. Моя текущая конфигурация проекта Laravel:
"php": ">=5.5.9",
"laravel/framework": "5.2.*"
Но когда я запускаю "php -v" в моем проекте, это показывает, что моя версия PHP сейчас 7.2. Есть ли способ, которым я мог бы понизить версию PHP без потери файлов моего проекта? Любая помощь приветствуется.
5 ответов
Единственный способ обойти это - отредактировать строку ошибки 1185 в 'vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php' с помощью:
$originalWhereCount = is_array($query->wheres) ? count($query->wheres) : 0;
Я не знаю, плохо ли это для будущего проекта, но это был единственный способ заставить мой проект работать.
Здесь вы можете сделать несколько вещей:
- Вы можете понизить версию PHP.
- Вы можете обновить свой синтаксис при выполнении запроса:-
Изменить от этого
$comment = Comment::get();
к этому
$comment = Comment::get()->toArray();
Вы можете попробовать это
$comment = comment::get()->all();
@if(count($comment)>0)
//displaying comments
@endif
То, что вы пытаетесь сделать, может быть решено с помощью https://laravel.com/docs/5.6/collections
Это превратит ваш
@if(count($comment)>0)
//displaying comments
@endif
в
@if($comment->count() > 0)
//displaying comments
@endif
Итак, прежде всего, вы не должны использовать в вашем контроллере:
$comment = Comment::all();
но
$comments = Comment::all();
и передать это, чтобы рассмотреть как
return view('some_view', compact('comments'));
Поскольку это коллекция, вы должны использовать имя переменной множественного числа, чтобы избежать путаницы.
Теперь, по вашему мнению, вы должны использовать:
@if ($comments->count())
@foreach ($comments as $comment)
// here you display single comment data for example {{ $comment->text }}
@endforeach
@endif