mg4377娱乐娱城官网_mg4377娱乐手机版_www.mg4377.com

Thinkphp中mongodb数据库使用or查询,Thinkphp分页时查

时间:2019-07-20 03:03来源:mg4377娱乐手机版
有个品类用了mongodb数据库,查询条件有and也许有or,按Thinkphp官方手册,使用复合查询(_complex),getLastSql输出查询语句,开掘查询条件是空的.用字符串形式查询(_string),央求字符串查询(

有个品类用了mongodb数据库,查询条件有and也许有or,按Thinkphp官方手册,使用复合查询(_complex),getLastSql输出查询语句,开掘查询条件是空的.用字符串形式查询(_string),央求字符串查询(_query)无法满意必要.推断用mongodb的用户相当少,thinkphp官方对那地点支撑也远远不足.打开thinkphp的mongodb驱动,Thinkphp/Extend/Driver/Db/DbMongo.class.php,找到protected function parseThinkWhere($key,$val)方法,能够窥见,switch里未有_complex,也便是说,Thinkphp使用mongodb时,根本不帮助复合查询.加上:

有个类别用了mongodbmg4377娱乐手机版 ,数据库Thinkphp中mongodb数据库使用or查询,Thinkphp分页时查询条件保存方法。,查询条件有and也可能有or,按Thinkphp官方手册,使用复合查询(_complex),getLastSql输出查询语句,发掘查询条件是空的.用字符串方式查询(_string),诉求字符串查询(_query)不可能满足须求.猜度用mongodb的用户相当少,thinkphp法定对那地方支撑也相当不足.展开thinkphp的mongodb驱动,Thinkphp/Extend/Driver/Db/DbMongo.class.php,找到protected function parseThinkWhere($key,$val)方法,可以窥见,switch里未有_complex,也便是说,Thinkphp使用mongodb时,根本不支持复合查询.加上:

web应用中有时要根据用户提交的查询条件举行过滤,再以列表格局呈今后浏览器上.若是这种查询是三种标准化的整合,并要进行分页呈现,则什么在分页导航中维系查询条件,是必须消除的难题.

复制代码 代码如下:

 代码如下

在Thinkphp中, 已有分页类"OCR-VG.Util.Page",而且能够用$page->parameter保存查询参数, 但大概是受示例程序的影响,非常多tper纠结于$page->parameter无法保存一些繁杂条件,并自行开荒出一些很复杂的次序消除那么些主题材料. 其实只要用好$page->parameter,只需几行代码就会消除.

case '_complex'://复合查询
             $arr   = array();
             foreach ($val as $nkey=>$nval){
              if( strpos($nkey,'_')!=0)
              {
               $parseArr=$this->parseWhereItem($nkey,$nval);
               //转变到靶子
               $obj=new stdClass();
               foreach ($parseArr as $pkey=>$pval)
               {
                $obj->$pkey=$pval;
               }
               array_push($arr, $obj);
              }
             }
             if(isset($val['_logic']) && strtolower($val['_logic']) == 'or' ) {
              unset($val['_logic']);
              $query['$or']   =  $arr;
             }
             break;

case '_complex'://复合查询
             $arr   = array();
             foreach ($val as $nkey=>$nval){
              if( strpos($nkey,'_')!=0)
              {
               $parseArr=$this->parseWhereItem($nkey,$nval);
               //转变到靶子
               $obj=new stdClass();
               foreach ($parseArr as $pkey=>$pval)
               {
                $obj->$pkey=$pval;
               }
               array_push($arr, $obj);
              }
             }
             if(isset($val['_logic']) && strtolower($val['_logic']) == 'or' ) {
              unset($val['_logic']);
              $query['$or']   =  $arr;
             }
             break;

先侦察一下用户提交查询条件的历程: 一般景况下,会给用户提供二个form,让用户设定种种查询过滤条件,然后用户提交这些form,提交能够是价值观的POST,也得以是Ajax,那个无所谓. 服务器收到用户提交的查询央浼后, 先得到$_POST数据,再经过转变来查询语句中的$map,然后经过模型的where($map)语句获取符合条件的记录总量及当前分页记录集合,重返给客户端显示. $_POST数据是精简清晰的,而$map则跟数据库的表/字段相关,不常很复杂,比方含有二维数组.

编辑:mg4377娱乐手机版 本文来源:Thinkphp中mongodb数据库使用or查询,Thinkphp分页时查

关键词: