count (): параметр должен быть массивом или объектом, который реализует счетную ошибку в проекте - PullRequest
0 голосов
/ 22 сентября 2018

Я сейчас работаю над проектом Laravel и слежу за курсом.Все шло просто отлично, пока мне не пришлось добавить «красноречивый» в мой проект.Этот пакет работает просто отлично, но теперь я получаю следующую ошибку в моем проекте:

count (): параметр должен быть массивом или объектом, который реализует Countable

Я использую эту функцию 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 ]

0 голосов
/ 22 сентября 2018

Единственный способ, которым я мог бы обойти это, - это отредактировать строку ошибки 1185 в 'vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Builder.php' с помощью:

$originalWhereCount = is_array($query->wheres) ? count($query->wheres) : 0;

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

0 голосов
/ 22 сентября 2018

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

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

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

$comment = Comment::get();

на это

$comment = Comment::get()->toArray();
0 голосов
/ 22 сентября 2018

Вы можете попробовать это

$comment = comment::get()->all();

@if(count($comment)>0)
  //displaying comments
@endif
0 голосов
/ 22 сентября 2018

Итак, прежде всего, вы не должны использовать в вашем контроллере:

$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
0 голосов
/ 22 сентября 2018

То, что вы пытаетесь сделать, может быть решено с помощью https://laravel.com/docs/5.6/collections#method-count

Это превратит ваш

@if(count($comment)>0)
   //displaying comments
@endif

в

@if($comment->count() > 0)
//displaying comments
@endif
...