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