抛出警告:count(): Parameter must be an array or an object that implements Countable

Warning thrown: count(): Parameter must be an array or an object that implements Countable

同时使用 "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 [▶]
}

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

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

当你只通过 id 查找时,为什么要计算一个 $user?当然它只会 return 1 或 0。

我发现这对 collections

最有用

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

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

count(($user ?? []))