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