第一次封裝的 改動較大比較亂勋功, 抽時間又寫了一個领曼,條理稍微舒服一點,有需要改進的地方绪励,慢慢維護吧蓉坎,測試可用澳眷。
/*
* @attention 本方法不需要前端額外處理發(fā)送的數(shù)據(jù)結構,服務端已經(jīng)處理蛉艾。否則會找不到對應數(shù)據(jù)钳踊!
* @attention 額外增加了時間的范圍搜索邏輯處理 需要時間搜索請前端自行傳值!可以留空勿侯!
* @param $request datatable的數(shù)據(jù) startDate 代表開始時間 endDate 代表結束時間
* @param $tableName 操作的數(shù)據(jù)表
* @param $searchMust 數(shù)據(jù)過濾的必須條件 e.g. where status = 1 可以為空 []
* @param $searchColumns 根據(jù)哪些列進行模擬搜索拓瞪,一維數(shù)組,可以為空數(shù)組 []
* @param $dataTime 根據(jù)哪個字段進行時間范圍搜索 必須是Y-m-d H:i:s
*/
static public function class_demo_dt( $request, $tableName, $searchMust, $searchColumns, $dataTime ) {
global $wpdb;
// data table 需要四個參數(shù) // draw 全部的記錄數(shù) 過濾后的記錄數(shù) 數(shù)據(jù)
// 除了開始時間和結束時間需要前臺額外傳值 其他的值datatables自己會處理
$draw = $request['draw']; //會直接轉換int類型返回給前臺
$search = $request['search']['value']; //獲取前臺傳過來的過濾條件
$start = $request['start']; //從多少開始
$length = $request['length']; //數(shù)據(jù)長度
$orderColumns = $request['order']['0']['column']; //那一列排序助琐,從0開始
$orderDir = $request['order']['0']['dir']; //ase desc 升序或者降
$startDate = $request['startDate']; //開始時間
$endDate = $request['endDate']; //結束時間
// $orderDate = $request['columns'][$orderColumns]['data']; //獲取當前需要排序的字段
$orderDate = 'create_date'; //獲取當前需要排序的字段 測試接口的時候 在放出去
// $orderDate = 'update_date'; //獲取當前需要排序的字段
// 如果有默認排序的字段的話 拼接sql 沒有則為''
if( isset( $orderColumns ) ) {
$orderSql = " order by {$orderDate} ".$orderDir;
}else{
$orderSql = '';
}
// 分頁數(shù)據(jù) 控制每頁的顯示條數(shù)
$limitSql = '';
$limitFlag = isset( $start ) && $length != -1 ;
if ( $limitFlag ) {
$limitSql = " LIMIT ".intval($start).", ".intval($length);
}
// 如果有必須查詢條件
if ( count( $searchMust ) > 0 ) {
foreach ($searchMust as $key => $value) {
$result[] = $key . ' = ' . "{$value}";
}
$condition = join( ' AND ',$result );
$sumSql = "SELECT count(1) as sum FROM {$tableName} WHERE 1 AND $condition";
$recordsTotal = $wpdb->get_row( $sumSql, ARRAY_A )['sum'];
$totalresultSql = "SELECT * FROM {$tableName} WHERE 1 AND $condition";
}else{
$sumSql = "SELECT count(1) as sum FROM {$tableName} WHERE 1";
$recordsTotal = $wpdb->get_row( $sumSql, ARRAY_A )['sum'];
$totalresultSql = "SELECT * FROM {$tableName} WHERE 1 ";
}
// 如果時間范圍過濾存在
if ( strlen( $startDate ) > 0 && strlen( $endDate ) > 0 ) {
$timeSql = ' AND (' . " $dataTime BETWEEN '". "$startDate". "' AND '". "$endDate"."'" . ' ) ';
}else{
$timeSql = false;
}
// 如果有搜索條件
if ( strlen( $search ) > 0 ) {
$whereCondition = ' AND ( ';
foreach ( $searchColumns as $keys => $value ) {
// var_dump( $value )
if ( $keys == 0 ){ // 如果單個匹配的話
$whereCondition .= $value . ' LIKE BINARY "%' . $search . '%" ';
}else { //如果是多個匹配的話
$whereCondition .= ' OR ' . $value . ' LIKE BINARY "%' . $search . '%" ';
}
}
$whereCondition .= ' ) ';
}
if ( $timeSql && $whereCondition ) {
$recordsFiltered = $wpdb->get_row( $sumSql.$whereCondition.$timeSql.$orderSql, ARRAY_A )['sum'];
$infos = $wpdb->get_results( $totalresultSql.$whereCondition.$timeSql.$orderSql.$limitSql,ARRAY_A );
}elseif ( !empty( $timeSql ) ) {
$recordsFiltered = $wpdb->get_row( $sumSql.$timeSql.$orderSql, ARRAY_A )['sum'];
$infos = $wpdb->get_results( $totalresultSql.$timeSql.$orderSql.$limitSql,ARRAY_A );
}else{
$recordsFiltered = $wpdb->get_row( $sumSql.$orderSql, ARRAY_A )['sum'];
$infos = $wpdb->get_results( $totalresultSql.$orderSql.$limitSql,ARRAY_A );
}
return array(
"draw" =>intval($draw),
"recordsTotal" => intval($recordsTotal),
"recordsFiltered" => intval($recordsFiltered),
"data" => $infos
);
}