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;

Я не знаю, плохо ли это для будущего проекта, но это был единственный способ заставить мой проект работать.

Здесь вы можете сделать несколько вещей:

  1. Вы можете понизить версию PHP.
  2. Вы можете обновить свой синтаксис при выполнении запроса:-

Изменить от этого

$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
Другие вопросы по тегам