count(): параметр должен быть массивом или объектом, который реализует Countable в php 7.2.1.

count(): параметр должен быть массивом или объектом, который реализует Countable в 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;
   }
}

person Beginner    schedule 14.02.2018    source источник
comment
Пожалуйста, уточните вашу конкретную проблему или добавьте дополнительные детали, чтобы выделить именно то, что вам нужно. В том виде, в котором он сейчас написан, трудно точно сказать, о чем вы спрашиваете.   -  person Yupik    schedule 14.02.2018
comment
count() не поддерживается в php 7.2.1.   -  person Beginner    schedule 14.02.2018
comment
если моя функция возвращает объект, мне нужно преобразовать его в массив или наоборот   -  person Beginner    schedule 14.02.2018
comment
Тем не менее неясно, о чем вы спрашиваете, добавьте соответствующий код и опишите проблему.   -  person Yupik    schedule 14.02.2018
comment
где ваш код, в котором вы извлекаете объект, а затем пытаетесь подсчитать, добавьте код, относящийся к вашей проблеме   -  person Muhammad Omer Aslam    schedule 14.02.2018
comment
отредактировал вопрос.   -  person Beginner    schedule 14.02.2018
comment
добавил ответ, чтобы посмотреть, поможет ли это   -  person Muhammad Omer Aslam    schedule 14.02.2018


Ответы (2)


Дело в том, что вы проверяете count > 1 с помощью ->one(), что выглядит странно, глядя на свой код, который вы хотите вернуть NULL, если запись не найдена, и если вы посмотрите в документацию, функция one() уже возвращает NULL, если записи не найдены, поэтому вы добавляете дополнительный код, и он можно было бы легко сократить до

public static function findAdminByUsername($username)
{
    return static::find()->where(
        [
            'username' => $username,
            'userType' => 'ADMIN',
            'user_status' => self::STATUS_ACTIVE,
        ]
    )->one();
}
person Muhammad Omer Aslam    schedule 14.02.2018
comment
Соответствующий и очень хорошо объясненный. Благодарю вас! - person Beginner; 22.07.2018

Вы используете 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();
person scaisEdge    schedule 14.02.2018
comment
Никогда не используйте isset() для простых переменных. Вместо этого используйте $adminUser !== null. В этот момент также становится очевидным, что проверка в этом случае совершенно бесполезна, поскольку вы все равно возвращаете одно и то же значение. - person NikiC; 14.02.2018
comment
@NikiC find() --›one() в yii2 возвращает объект, когда найдена строка, но возвращает ноль, если ничего не найдено, поэтому isset(..) должен быть правильным .. - person scaisEdge; 14.02.2018