web-dev-qa-db-ja.com

yii2アクティブレコード検索列が等しくない

ステータスがアクティブでロールがユーザーであるユーザーをdbから見つけるためにこのコードがあります

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

ロールが「user」と等しくないユーザーを見つける必要があります。これどうやってするの?

追伸:YII2を使用しています

22

別のソリューションを提供したいのですが、それは私にとってよりエレガントです。 Yii 1なので、等しくない操作をチェックする必要がある場合は、このアプローチを使用します。

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

次のようなカスタムwhere句を渡すことができます。

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

最終的な機能は次のようになります。

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

わかりました、私はこの方法でやった:

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