web-dev-qa-db-fra.com

yii2 colonne active de recherche d'enregistrement différent

J'ai ce code pour trouver un utilisateur de la base de données dont le statut est actif et le rôle est l'utilisateur

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

J'ai besoin de trouver un utilisateur dont le rôle n'est pas égal à "utilisateur". Comment puis-je faire ceci?

P.S: J'utilise YII2

22

Je veux proposer une autre solution, c'est plus élégant pour moi. J'utilise généralement cette approche depuis Yii 1 lorsque j'ai besoin de vérifier le fonctionnement différent.

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

Vous pouvez passer une clause where personnalisée comme ceci:

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

Votre fonction finale ressemblera à:

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

Ok, j'ai fait comme ça:

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