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             }
View Code

  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 }
View Code

  因为直接用CDbCriteriaaddSearchCondition方法不能实现,他生成的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 }
View Code

  调用建立的表关系 //关联(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>
View Code

 

posted @ 2015-11-15 22:52  JackMee  阅读(767)  评论(0编辑  收藏  举报