Yii2 активная запись поиска не равна
У меня есть этот код, чтобы найти пользователя из db, статус которого активен, а роль - пользователь
public static function findByUsername($username)
{
return static::find(['username' => $username, 'status' => static::STATUS_ACTIVE, 'role'=>'user']);
}
Мне нужно найти пользователя, что роль не равна "пользователю". Как я могу это сделать?
P.S: Я использую YII2
Ответы
Ответ 1
Я хочу предложить другое решение, это более элегантно для меня. Обычно я использую этот подход с Yii 1, когда мне нужно проверить не равную операцию.
$models = Book::find()->where('id != :id and type != :type', ['id'=>1, 'type'=>1])->all();
Ответ 2
Вы можете передать пользовательское предложение where следующим образом:
andWhere(['!=', 'field', 'value'])
Ваша последняя функция будет выглядеть так:
public static function findByUsername($username)
{
return static::find()
->where([
'username' => $username,
'status' => static::STATUS_ACTIVE
])
->andWhere(['!=', 'role', 'user'])
->all();
}
Ответ 3
Хорошо, я сделал так:
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
вы можете попробовать это. просто пример
$existEmail = Users::model()->findByAttributes(
array('email'=>$this->email),
array(
'condition'=>'user_id!=:id',
'params'=>array('id'=>$this->user_id),
));
Ответ 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'"));
}