繁体   English   中英

Yii CGridView:如何添加静态WHERE条件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM