1. 程式人生 > >Ecstore getlist方法中filter的具體用法

Ecstore getlist方法中filter的具體用法

Ecstore自行封裝了db->select的處理方法getlist,基本上能滿足大部分的單表查詢功能,它的函式模型是public function getList($cols=’*’, $filter=array(), $offset=0, $limit=-1, $orderby=null)。從欄位取名不難看出,幾個引數從左到右分別是指返回的列名,過濾器,位置,限制條數,排序。
比如想要查詢members表內各種使用者記錄可以用下面的程式碼。

$members = $this->app->model('members');

//select * from members where member_id = 1;
$members->getlist('*',array('member_id' => 1));

//select member_id,name from members where member_id =1;
$members->getlist('member_id,name',array('member_id' => 1));

//select member_id,name from members where member_id =1 and name ='tiandi';
$members->getlist('member_id,name',array('member_id' => 1,'name' => 'tiandi'));

//select member_id,name from members where member_id <2 and name ='tiandi';
$members->getlist('member_id,name',array('member_id|lthan' => 2));

更詳細的filter引數可通過dbeav/lib/filter.php檢視下面的程式碼獲悉:

 $FilterArray= array('than'=>' > '.$var,
     'lthan'=>' < '.$var,
     'nequal'=>' = \''.$var.'\'',
     'noequal'=>' <> \''.$var.'\'',
     'tequal'=>' = \''.$var.'\'',
     'sthan'=>' <= '.$var,
     'bthan'=>' >= '.$var,
     'has'=>' like \'%'.$var.'%\'',
     'head'=>' like \''.$var.'%\'',
     'foot'=>' like \'%'.$var.'\'',
     'nohas'=>' not like \'%'.$var.'%\'',
     'between'=>' {field}>='.$var[0].' and '.' {field}<='.$var[1],
     'in' =>" in ('".implode("','",(array)$var)."') ",
     'notin' =>" not in ('".implode("','",(array)$var)."') ",
);

如果碰上條件帶有或邏輯的時候,上面的方法都不能直接使用,這個時候需要用到filter_sql。將所需要執行的sql語句where部分直接錄入在filter_sql中:

//select * from members where member_id = 1 or name = 'tiandi';
$members->getlist('*',array('filter_sql' => "`member_id` = 1 or `name` = 'tiandi'"));

以上即是所有的filter用法,可能會有遺漏,請自行補上。

文章評分8次,平均分3.4