23

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

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

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

PS: 私は YII2 を使用しています

4

5 に答える 5

29

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

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

最終的な関数は次のようになります。

public static function findByUsername($username)
{
    return static::find()
        ->where([
            'username' => $username,
            'status' => static::STATUS_ACTIVE
        ])
        ->andWhere(['!=', 'role', 'user'])
        ->all();
}
于 2015-09-08T07:40:31.070 に答える
1

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

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();
}
于 2014-04-09T13:23:21.643 に答える
-5

あなたが試すことができます:

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

または:

public static function findByUsername($username)
{
  $result=Users::model()->findByAttributes(array('condition'=>"role != 'user',username = '$username'"));
}
于 2014-04-09T13:21:23.650 に答える