【问题标题】:Warning thrown: count(): Parameter must be an array or an object that implements Countable抛出警告:count():参数必须是数组或实现 Countable 的对象
【发布时间】:2020-01-27 07:53:28
【问题描述】:

使用"laravel/framework": "5.8.*",

我收到以下错误:

    $user = App\User::find(314);
    dump(PHP_VERSION);
    dump(is_object($user));
    dump(is_array($user));
    dump(count($user));
    dd($user);

我收到以下错误count(): Parameter must be an array or an object that implements Countable

但是,当我使警告静音时。我们得到正确的输出@dump(count($user));

"7.2.19"
true
false
1
User {#821 ▼
  #table: "users"
  #guarded: array:5 [▶]

....


注意:count() 在集合超过 1 时起作用。

    $users = App\User::find([12,13,14,15,165,166,1666,133,11,111]);
    dump(PHP_VERSION);
    dump(is_object($user));
    dump(is_array($user));
    dump(count($user));
    dd($user);

输出:

"7.2.19"
true
false
9
Collection {#825 ▼
  #items: array:9 [▶]
}

【问题讨论】:

    标签: laravel laravel-5.7 laravel-5.8 php-7.2


    【解决方案1】:

    我发现这对收藏最有用

    if(count($user->toArray()) > 0)

    也许是更好的方法(未经测试)

    count(($user ?? []))

    【讨论】:

      【解决方案2】:

      当您仅通过 id 查找 $user 时,为什么要计算它?当然它只会返回 1 或 0。

      【讨论】:

        【解决方案3】:

        当返回的数据可能与数组或对象不同时,不支持 count 方法。另一种方法是使用where 语句,该语句在调用时始终返回一个数组:

        $users = App\User::whereIn('id', [12,13,14,15,165,166,1666,133,11,111])->get();
        var_dump($users);
        

        【讨论】:

        • 可以清楚地看到isobject返回true。 yoi给出的例子也不是问题,它是单一的结果。这给我带来了麻烦。
        • 经过一番研究,您似乎是正确的,我所期望的不是正常的 laravel 模型行为,对否决票表示歉意,请编辑您的答案,以便我可以取消投票
        猜你喜欢
        • 2018-12-19
        • 1970-01-01
        • 2018-09-10
        • 2019-08-15
        • 2020-01-18
        • 2019-06-20
        • 2020-04-08
        • 2019-10-18
        • 2018-10-19
        相关资源
        最近更新 更多