Столбец поиска активной записи yii2 не равен

У меня есть этот код, чтобы найти пользователя из БД, статус которого активен, а роль - пользователь

public static function findByUsername($username)
{
 return static::find(['username' => $username, 'status' => static::STATUS_ACTIVE, 'role'=>'user']);
}

Мне нужно найти пользователя, роль которого не равна «пользователю». Как я могу это сделать?

PS: я использую YII2


person Sarvar Nishonboyev    schedule 09.04.2014    source источник


Ответы (5)


Я хочу предложить другое решение, оно более элегантно для меня. Я обычно использую этот подход, начиная с Yii 1, когда мне нужно проверить неравную операцию.

$models = Book::find()->where('id != :id and type != :type', ['id'=>1, 'type'=>1])->all();
person Alex    schedule 09.04.2014

Вы можете передать пользовательское предложение where следующим образом:

andWhere(['!=', 'field', 'value'])

Ваша окончательная функция будет выглядеть так:

public static function findByUsername($username)
{
    return static::find()
        ->where([
            'username' => $username,
            'status' => static::STATUS_ACTIVE
        ])
        ->andWhere(['!=', 'role', 'user'])
        ->all();
}
person Stanimir Stoyanov    schedule 08.09.2015

Хорошо, я сделал так:

public static function findByUsername($username)
{
    $sql="select * from tbl_user where username=:uname and status=:st and role != 'user'";
    return static::findBySql($sql,[":uname"=>$username,":st"=>static::STATUS_ACTIVE])->one();
}
person Sarvar Nishonboyev    schedule 09.04.2014

вы можете попробовать этот. просто пример

 $existEmail = Users::model()->findByAttributes(
        array('email'=>$this->email),
        array(
            'condition'=>'user_id!=:id',
        'params'=>array('id'=>$this->user_id),
        ));
person Manoj Dhiman    schedule 25.05.2015

Можешь попробовать:

public static function findByUsername($username)
{
 $criteria = new CDbCriteria;  
 $criteria->addCondition("username != 'username'");
 $criteria->addCondition("role != 'user'");
 $result = User::model()->find($criteria);
 return $result;
}

Or:

public static function findByUsername($username)
{
  $result=Users::model()->findByAttributes(array('condition'=>"role != 'user',username = '$username'"));
}
person Wit Wikky    schedule 09.04.2014
comment
Чувак, это хорошо, но это работало в Yii 1.x, а не в Yii 2.x. - person Asped; 06.03.2015