[英]Yii CGridView: how to add a static WHERE condtion?
我有一个标准的Gii创建的管理视图,它使用CGridView,它显示我的用户表数据。
问题是名称为“root”的用户必须不可见。
有没有办法在条件“...和用户名!='root'”中添加静态?
admin.php [查看]
'columns'=>array(
'id',
'username',
'password',
'realname',
'email',
.....
user.php [型号]
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('username',$this->username,true);
$criteria->compare('password',$this->password,true);
$criteria->compare('realname',$this->realname,true);
$criteria->compare('email',$this->email,true);
......
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
您可以像这样使用CDbCriteria的addCondition :
$criteria->addCondition("username !='root'");
您最好的选择是使用Yii范围 ,这些范围本质上是一个保存的where子句(或现有标准的其他修改),您可以在整个应用程序中应用,只需要在一个地方更改,如果您的标准稍后更改。
使它们更酷的原因是你可以将它们与其他范围/标准变化(例如来自网格中的用户)串起来,而不必跟踪什么标准条款因什么而改变。
一些可能适用于您的情况的示例。 在你的控制器中你可能有这样的东西:
$users = User::model()->search()->findAll();
Asgaroth的答案回答了你在表面上提出的要求。 但是你可以使用范围做更多的事情(并且很容易)。
如果您将以下内容添加到您的用户模型:
class User extends CActiveRecord
{
......
public function scopes()
{
return array(
'active'=>array(
'condition'=>'active=1',
),
'isAdmin'=>array(
'condition'=>'isAdmin=1',
),
);
}
}
那么您可以在控制器中检索活动用户(仍然应用用户的过滤器):
$users = User::model()->active()->search()->findAll();
或者,您可以检索所有活动的管理员用户(不按您的gridview标准进行过滤),如下所示:
$users = User::model()->active()->isAdmin()->findAll();
默认范围只是同一想法的扩展:
class User extends CActiveRecord
{
public function defaultScope()
{
return array(
'condition'=>"username != 'root'",
);
}
}
如果在您的isAdmin范围之前返回root用户,则应用默认范围将从返回的模型中消除root用户,因为它适用于您所做的每个User :: model()查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.