编程语言
首页 > 编程语言> > php-如何按状态过滤用户列表? -Yii

php-如何按状态过滤用户列表? -Yii

作者:互联网

我使用的是Yii Framework,我想按用户列表的状态进行过滤.状态由数字定义:

> 0:启用
> 1:禁止
> 2:已禁用

因此,使用函数itemAlias()显示正确的状态:

public static function itemAlias($attribute, $value=null) {

    $_items = array(
        'status' => array(
            '0' => Yii::t("status", 'Enabled'),
            '1' => Yii::t("status", 'Banned'),
            '2' => Yii::t("status", 'Disabled'),
        ),
    );

    if (isset($value))
        return isset($_items[$attribute][$value]) ? $_items[$attribute][$value] : false;
    else
        return isset($_items[$attribute]) ? $_items[$attribute] : false; 
 }

因此,在查看用户时,会显示我的状态良好(例如:“已启用”),但是当我要按状态进行过滤时,必须使用1、2或3进行过滤.

我想知道是否可以按状态(活动,禁止,禁用)进行过滤?

解决方法:

当然可以.
您可以创建如下范围:

public function scopes()
{
   return array(
       'enabled' => array(
          'condition' => 'status=0',
       ),
       'banned' => array(
          'condition' => 'status=1',
       ),
   );
}

然后在您的查询中,您将得到以下内容:

$activeUsers = User::model()->enabled()->findAll();
$bannedUsers = User::model()->banned()->findAll();

另外,您可以命名命名范围:

public function statusIs($status)
{
    // you can accept a status string here and translate it in an integer, your choice.
    return $this->getDbCriteria()->mergeWith(array(
       'condition' => 'status = '.(int)$status
    ));
}

并在查询中使用它,例如:

User::model()->statusIs(0)->findAll();// get all enabled

此外,使用范围还可以查询相关模型,例如:

Posts::model()->with('users:enabled')->findAll();

应该也可以.

只需看一下http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes即可了解更多.

L.E:

public function getStatuses()
{
   return array(
      '0' => Yii::t("status", 'Enabled'),
      '1' => Yii::t("status", 'Banned'),
      '2' => Yii::t("status", 'Disabled'),
   );
}

public function getStatusesDropDown(array $htmlOpts = array())
{
   return CHtml::activeDropDownList($this, 'status', $this->getStatuses(),$htmlOpts);
}

现在,您已经在CActiveForm或任何其他表单中具有下拉代码,您可以通过以下方式显示此状态:

echo $model->getStatusesDropDown();

当您从下拉列表中选择状态并提交表单时,将提交名为YourModel [status]的输入.它的值为0或1或2.接下来,在search()方法中,您必须:

public function search()
{
    $criteria = new CDbCriteria;
    [...]
    if ($this->status !== null && (int)$this->status >= 0) {
       $criteria->compare('status', (int)$this->status);
    }
    [...]
}

就是这样.

标签:yii-extensions,yii,yii-components,php
来源: https://codeday.me/bug/20191030/1971038.html