【问题标题】:count(): Parameter must be an array or an object that implements Countable error in projectcount():参数必须是数组或对象,项目中实现了Countable错误
【发布时间】:2019-02-26 15:44:33
【问题描述】:

我目前正在从事 Laravel 项目,并且正在学习一门课程。一切都很顺利,直到我不得不将eloquent-sluggable 添加到我的项目中。该软件包工作正常,但现在我的项目中出现以下错误:

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 版本?任何帮助表示赞赏。

【问题讨论】:

  • 什么是“$comment”?
  • 您传递的是对象而不是数组。 Count( ) 函数只计算数组。首先将其转换为数组。
  • 我将所有 cmets 放入控制器中的该变量中:$comment = Comment::all();

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


【解决方案1】:

您正在尝试做的事情可以通过https://laravel.com/docs/5.6/collections#method-count 解决

这会让你的

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

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

【讨论】:

    【解决方案2】:

    你可以试试这个

    $comment = comment::get()->all();
    
    @if(count($comment)>0)
      //displaying comments
    @endif
    

    【讨论】:

      【解决方案3】:

      所以首先,你不应该在你的控制器中使用:

      $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
      

      【讨论】:

      • 我知道,我在这个问题上拼错了。我在项目中就是这样使用的
      • 所以如果你使用我展示的代码,你仍然得到错误?你真的在$comments 上使用count() 而不是$comment ?请用您真正使用的代码更新您的问题
      • 更新的问题,仍然得到同样的错误。我现在是否必须为项目中的每个计数更改代码?
      • @zlatangoralija 不是真的。你是怎么得到你的cmets的?您是在控制器中只运行$comments = Comment::all();,还是以其他方式执行此操作?
      • 我只是运行 $cmets = Comment::all(); ,但我尝试了上面的一些建议,仍然得到同样的错误......
      【解决方案4】:

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

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

      从此改变

      $comment = Comment::get();
      

      到这里

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

      【讨论】:

        【解决方案5】:

        我可以解决这个问题的唯一方法是编辑 'vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php' 中的错误第 1185 行:

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

        我不知道这对未来的项目是否有害,但这是我可以让我的项目工作的唯一方法。

        【讨论】:

        • 这是完全不好的做法,因为您正在对核心文件进行更改。
        • 我知道,我会在以后的项目中尽量不这样做。我只是想通过任何方式让它工作......
        • 抱歉,当您更新作曲家时,您所做的自定义代码将被覆盖。
        猜你喜欢
        • 2018-06-28
        • 2018-07-24
        • 2020-08-15
        • 2019-08-03
        • 2018-06-08
        • 2018-09-22
        • 1970-01-01
        • 2020-03-02
        • 2019-05-10
        相关资源
        最近更新 更多