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

count(): Parameter must be an array or an object that implements Countable in php 7.2.1

count():参数必须是数组或对象,在php 7.2.1中实现Countable 使用 Yii2

如何解决这个问题?

 public static function findAdminByUsername($username)
{
    $adminUser = static::find()->where(['username' => $username,'userType'=>'ADMIN','user_status'=>self::STATUS_ACTIVE])->one();
    if(count($adminUser)>0){
        return $adminUser;
    }else{
        return null;
   }
}

您正在使用 find()......->one() 所以你的查询应该return只是一个对象..没有迭代能力。

如果你想检查 find() return 是否是一个值,那么你可以使用 isset 检查。 find()->one() return 如果查询失败则返回null。

  public static function findAdminByUsername($username)
  {
      $adminUser = static::find()->where(['username' => $username,'userType'=>'ADMIN','user_status'=>self::STATUS_ACTIVE])->one();
      if( $adminUser !== null ){
          return $adminUser;
      }else{
          return null;
     }
  }

如果你不需要其他 return find()->..one() 的结果,你可以简单地 return

return static::find()->
  where(['username' => $username,'userType'=>'ADMIN','user_status'=>self::STATUS_ACTIVE])
     ->one();

问题是您正在使用 ->one() 检查 count > 1,这看起来很奇怪,如果没有记录,请查看您想要 return NULL 的代码找到了,如果你查看文档,函数 one() 已经 returns NULL 如果没有找到记录,那么你正在添加额外的代码,它可以很容易地减少到

public static function findAdminByUsername($username)
{
    return static::find()->where(
        [
            'username' => $username,
            'userType' => 'ADMIN',
            'user_status' => self::STATUS_ACTIVE,
        ]
    )->one();
}