Yii2 count():参数必须是在PHP7.2.1中实现Countable的数组或对象

Yii2 count():参数必须是在PHP7.2.1中实现Countable的数组或对象,yii2,php-7.2,Yii2,Php 7.2,count():参数必须是在php 7.2.1中实现可数的数组或对象 使用Yii2 如何解决这个问题 public static function findAdminByUsername($username) { $adminUser = static::find()->where(['username' => $username,'userType'=>'ADMIN','user_status'=>self::STATUS_ACTIVE])->one()

count()
:参数必须是在php 7.2.1中实现可数的数组或对象 使用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() 因此,您的查询应该只返回一个对象。。没有迭代能力

如果要检查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();
您正在使用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();

问题是您正在使用看起来很奇怪的
->one()
检查
count>1
,查看您的代码,如果没有找到记录,您希望返回
NULL
,如果查看文档,函数已经返回
NULL
,如果没有找到记录,那么您将添加额外的代码,并且可以很容易地将其缩减为

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

问题是您正在使用看起来很奇怪的
->one()
检查
count>1
,查看您的代码,如果没有找到记录,您希望返回
NULL
,如果查看文档,函数已经返回
NULL
,如果没有找到记录,那么您将添加额外的代码,并且可以很容易地将其缩减为

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

请澄清您的具体问题或添加其他详细信息,以突出显示您所需的内容。正如目前编写的那样,很难准确说出您要问什么。count()在php 7.2.1中不支持。如果我的函数返回object,我需要将其转换为array或Viceversa,直到不清楚您要问什么为止,添加一些相关代码并描述问题您在其中检索对象并尝试计数的代码在哪里,添加与您的问题相关的代码请澄清您的具体问题或添加其他详细信息以突出显示您需要的内容。正如目前编写的那样,很难准确说出您要问什么。count()在php 7.2.1中不支持。如果我的函数返回object,我需要将其转换为array或Viceversa,直到不清楚您要问什么为止,添加一些相关代码并描述问题在哪里是检索对象然后尝试计数的代码,添加与问题相关的代码切勿在普通变量上使用isset()。使用
$adminUser!==改为null
。在这一点上,很明显,在这种情况下,检查是完全无用的,因为您最终还是返回了相同的值。@NikiC yii2中的find()-->one()在找到一行时返回一个对象,但如果没有找到任何内容,则返回null,因此isset(..)应该是正确的。.不要对普通变量使用isset()。使用
$adminUser!==改为null
。在这一点上,很明显,在这种情况下,检查是完全无用的,因为您最终只返回相同的值。@NikiC yii2中的find()-->one()在找到一行时返回一个对象,但如果没有找到任何内容,则返回null,因此isset(..)应该是正确的。.适当的一个,并且解释得很好。非常感谢。合适的一个,解释得很好。非常感谢。