yii2 active record find column not equal

2020-06-30 05:26发布

问题:

I have this code to find a user from db which status is active and role is user

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

I need to find a user that role is not equal to "user". How can I do this?

P.S: I'm using YII2

回答1:

I want to offer another solution, it's more elegant for me. I usually use this approach since Yii 1 when i need check not equal operation.

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


回答2:

You can pass custom where clause like this:

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

Your final function will look like:

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


回答3:

Ok, i've done by this way:

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();
}


回答4:

you can try this one . just an example

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


回答5:

You can try:

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'"));
}


标签: php yii2