美文网首页
生成查询所需要的条件,排序方式

生成查询所需要的条件,排序方式

作者: 聚齐 | 来源:发表于2017-07-24 00:00 被阅读12次

    /**

    *生成查询所需要的条件,排序方式

    *@parammixed $searchfields查询条件

    *@paramboolean $relationSearch是否关联查询

    *@returnarray

    */

    protected functionbuildparams($searchfields=null,$relationSearch=null)

    {

    $searchfields= is_null($searchfields) ?$this->searchFields:$searchfields;

    $relationSearch= is_null($relationSearch) ?$this->relationSearch:$relationSearch;

    $search=$this->request->get("search",'');

    $filter=$this->request->get("filter",'');

    $op=$this->request->get("op",'');

    $sort=$this->request->get("sort","id");

    $order=$this->request->get("order","DESC");

    $offset=$this->request->get("offset",0);

    $limit=$this->request->get("limit",0);

    $filter= json_decode($filter,TRUE);

    $op= json_decode($op,TRUE);

    $filter=$filter?$filter: [];

    $where= [];

    $modelName='';

    if($relationSearch)

    {

    if(!empty($this->model))

    {

    $class= get_class($this->model);

    $name= basename(str_replace('\\','/',$class));

    $name= strtolower(preg_replace('/(?

    $modelName=$name.".";

    }

    if(stripos($sort,".") ===false)

    {

    $sort=$modelName.$sort;

    }

    }

    if($search)

    {

    $searcharr= is_array($searchfields) ?$searchfields: explode(',',$searchfields);

    $searchlist= [];

    foreach($searcharras$k=>$v)

    {

    $searchlist[] = (stripos($v,".") !==false?$v:"{$modelName}`{$v}`") ." LIKE '%{$search}%'";

    }

    $where[] ="(". implode(' OR ',$searchlist) .")";

    }

    foreach($filteras$k=>$v)

    {

    $sym=isset($op[$k]) ?$op[$k] :'=';

    if(stripos($k,".") ===false)

    {

    $k=$modelName.$k;

    }

    $sym=isset($op[$k]) ?$op[$k] :$sym;

    switch($sym)

    {

    case'=':

    case'!=':

    case'LIKE':

    case'NOT LIKE':

    $where[] = [$k,$sym,$v];

    break;

    case'>':

    case'>=':

    case'<':

    case'<=':

    $where[] = [$k,$sym,intval($v)];

    break;

    case'IN(...)':

    case'NOT IN(...)':

    $where[] = [$k,str_replace('(...)','',$sym),explode(',',$v)];

    break;

    case'BETWEEN':

    case'NOT BETWEEN':

    $where[] = [$k,$sym,array_slice(explode(',',$v),0,2)];

    break;

    case'LIKE %...%':

    $where[] = [$k,'LIKE',"%{$v}%"];

    break;

    case'IS NULL':

    case'IS NOT NULL':

    $where[] = [$k,strtolower(str_replace('IS ','',$sym))];

    break;

    default:

    break;

    }

    }

    $where=function($query)use($where) {

    foreach($whereas$k=>$v)

    {

    if(is_array($v))

    {

    call_user_func_array([$query,'where'],$v);

    }

    else

    {

    $query->where($v);

    }

    }

    };

    return[$where,$sort,$order,$offset,$limit];

    }

    相关文章

      网友评论

          本文标题:生成查询所需要的条件,排序方式

          本文链接:https://www.haomeiwen.com/subject/usjvkxtx.html