1

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

如何解决这个问题?

 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;
   }
}
4

2 回答 2

3

问题是您正在检查count > 1using ->one()which 看起来很奇怪,如果没有找到记录,请查看您想要返回的代码NULL,如果您查看文档,如果没有找到记录,则该函数one()已经返回NULL,因此您正在添加额外的代码和它可以很容易地简化为

public static function findAdminByUsername($username)
{
    return static::find()->where(
        [
            'username' => $username,
            'userType' => 'ADMIN',
            'user_status' => self::STATUS_ACTIVE,
        ]
    )->one();
}
于 2018-02-14T08:29:14.340 回答
2

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

如果您想检查 find() 是否返回值,则可以使用 isset 进行检查。如果查询失败,find()->one() 返回 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;
     }
  }

如果您不需要其他人返回 find()->..one() 的结果,您可以简单地返回

return static::find()->
  where(['username' => $username,'userType'=>'ADMIN','user_status'=>self::STATUS_ACTIVE])
     ->one();
于 2018-02-14T08:13:10.020 回答