count():参数必须是在项目中实现Countable错误的数组或对象

时间:2018-09-22 13:33:07

标签: php laravel laravel-5 count laravel-blade

我目前正在研究laravel项目,并且正在学习课程。一切都进行得很好,直到我不得不在项目中添加“雄辩的”。该软件包可以正常工作,但是现在我的项目中出现以下错误:

  

count():参数必须是实现Countable的数组或对象

我在视图中使用了count()函数:

@if($comments->count() > 0)
   @forech($comments as $comment)
     //displaying single comment data
  @endforeach
@endif

现在我的问题是,为什么现在显示该错误。可能是因为我在项目中进行了“ composer update”,并将PHP版本更新到7.2,并且该版本中存在count()问题?我猜测“> =”符号更改了我的PHP版本。我当前的laravel项目配置:

"php": ">=5.5.9",
    "laravel/framework": "5.2.*"

但是当我在项目中运行“ php -v”时,它表明我的PHP版本现在是7.2。有没有办法可以在不丢失项目文件的情况下降级PHP版本?任何帮助表示赞赏。

5 个答案:

答案 0 :(得分:0)

您要尝试执行的操作可以通过https://laravel.com/docs/5.6/collections#method-count

来解决

这将使您

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

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

答案 1 :(得分:0)

您可以尝试这个

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

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

答案 2 :(得分:0)

因此,首先,您不应该在控制器中使用

$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

答案 3 :(得分:0)

在这里您可以做一些事情:-

  1. 您可以降级PHP版本。
  2. 您可以在执行查询时更新语法:-

对此进行更改

$comment = Comment::get();

对此

$comment = Comment::get()->toArray();

答案 4 :(得分:0)

我唯一能解决此问题的方法是,使用以下命令编辑“ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Builder.php”中的错误行1185:

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

我不知道这对将来的项目是否有害,但这是使我的项目正常工作的唯一方法。