23

我有这段代码可以从数据库中找到一个状态为活动且角色为用户的用户

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

我需要找到一个角色不等于“用户”的用户。我怎样才能做到这一点?

PS:我用的是YII2

4

5 回答 5

31

我想提供另一种解决方案,它对我来说更优雅。从 Yii 1 开始,当我需要检查不相等操作时,我通常使用这种方法。

$models = Book::find()->where('id != :id and type != :type', ['id'=>1, 'type'=>1])->all();
于 2014-04-09T19:44:07.107 回答
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 回答
-1

你可以试试这个。只是一个例子

 $existEmail = Users::model()->findByAttributes(
        array('email'=>$this->email),
        array(
            'condition'=>'user_id!=:id',
        'params'=>array('id'=>$this->user_id),
        ));
于 2015-05-25T12:03:41.743 回答
-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 回答