Yii 1 实现后台搜索,效果如下:
一. 下拉搜索:
1.模型中和常规的一样
if (isset($_GET['agency']['status']) && $_GET['agency']['status'] != 0)
{
$criteria->compare('status',$_GET['agency']['status']); }
2.控制器中,先确定下拉选项,用一个数组储存下拉列表
//审核状态
$checkStatusList = array( "0"=>"请选择审核...","1"=>"等待审核","2"=>"审核通过","3"=>"审核未通过","4"=>"禁用" );
3.视图中,用dropDownList调出数据
<?php echo CHtml::dropDownList( "agency[status]" ,
$_GET['agency']['status'] ,
$checkStatusList ,
array( "class"=>"form-control" , "style"=>"width:140px") ); ?>
二.多个字段查询
1.模型中
//名称.电话.手机.联系人
if (isset($_GET['agency']['agency_name']) && $_GET['agency']['agency_name'] != "")
{
$params = array();
//b2c_agency表里的agency_name,tel,mobile,contacts和输入的数据(这里是agency_name)对比。
$columns = array( 'agency_name' , 'tel' , 'mobile' , 'contacts' );
$keyword ='%'.strtr($_GET['agency']['agency_name'],array('%'=>'\%', '_'=>'\_', '\\'=>'\\\\')).'%'; foreach( $columns as $key )
{
$params[] = $key.' LIKE '.CDbCriteria::PARAM_PREFIX.CDbCriteria::$paramCount;
$criteria->params[CDbCriteria::PARAM_PREFIX.CDbCriteria::$paramCount++] = $keyword;
} $criteria->addCondition(implode(" OR ",$params), 'AND' );
}
因为直接用CDbCriteria的addSearchCondition方法不能实现,他生成的sql不能生成我们想要的,所以我们自己想办法实现应该有的sql语句,其中$params = array() 用来存like语句。$columns = array( 'agency_name' , 'tel' , 'mobile' , 'contacts' ); 存储表里要比对的字段。然后 $keyword ='%'.strtr($_GET['agency']['agency_name'],array('%'=>'\%', '_'=>'\_', '\\'=>'\\\\')).'%'; 中用$_GET['agency']['agency_name']得到用户输入到搜索框的值。最后$criteria->addCondition(implode(" OR ",$params), 'AND' ); 实现“AND”连接。
2.视图中
<div class="form-group">
<input
name="agency[agency_name]"
type="text"
class="form-control"
style="width:170px;"
placeholder = "名称/电话/手机/联系人"
value=<?php echo $_GET['agency']['agency_name'] ; ?>
>
</div>
三.关联表搜索
1.模型中
//代理的注册账户
'userInfo' => array( self::BELONGS_TO , 'B2cUsers' , 'user_id' ),
先再relations()方法添加关系,这个关系要自己确定。
然后
//用户账号
if (isset($_GET['agency']['user_id']) && $_GET['agency']['user_id'] != "")
{
//关联(user表)查找
$criteria->with = array( 'userInfo' ); $params = array();
$columns = array( 'userInfo.user_name' , 'userInfo.user_id', 'userInfo.office_phone', 'userInfo.mobile_phone' );
$keyword ='%'.strtr($_GET['agency']['user_id'],array('%'=>'\%', '_'=>'\_', '\\'=>'\\\\')).'%'; foreach( $columns as $key )
{
$params[] = $key.' LIKE '.CDbCriteria::PARAM_PREFIX.CDbCriteria::$paramCount;
$criteria->params[CDbCriteria::PARAM_PREFIX.CDbCriteria::$paramCount++] = $keyword;
} $criteria->addCondition(implode(" OR ",$params), 'AND' );
}
调用建立的表关系 //关联(user表)查找 $criteria->with = array( 'userInfo' ); ,其中$colums有所不同, $columns = array( 'userInfo.user_name' , 'userInfo.user_id', 'userInfo.office_phone', 'userInfo.mobile_phone' );
2.视图中
<div class="form-group">
<input
name="agency[user_id]"
type="text"
class="form-control"
style="width:140px;"
placeholder = "用户账号"
value=<?php echo $_GET['agency']['user_id'] ; ?>
>
</div>