首先貼上后台頁面相應模塊的列表頁效果以及多條件搜索的表單代碼
前端模版采用Xamdin1.0+Layui1.0,有需要請自行下載引入。
<form class="layui-form x-center" id="searchform" action="{:url('index/user/search')}" method="post"> <div class="layui-form-pane" style="margin-top: 15px;"> <div class="layui-form-item"> <div class="layui-input-inline"> <input value="" type="number" name="id" placeholder="請輸入用戶ID" class="layui-input"> </div> <div class="layui-input-inline"> <input value="" type="text" name="nickname" placeholder="請輸入用戶昵稱" class="layui-input"> </div> <div class="layui-input-inline"> <input value="" type="number" name="mobile" placeholder="請輸入用戶手機號" class="layui-input"> </div> <div class="layui-input-inline"> <select name="sex" class="layui-input"> <option value="">請選擇用戶性別</option> <option value="男">男</option> <option value="女">女</option> </select> </div> <div class="layui-input-inline"> <select name="create_time"> <option value="">請選擇注冊時間</option> <option value="today">今天</option> <option value="yesterday">昨天</option> <option value="week">本周</option> <option value="last week">上周</option> <option value="month">本月</option> <option value="last month">上月</option> <option value="year">今年</option> <option value="last year">去年</option> </select> </div> <div class="layui-input-inline" style="width:80px"> <button id="searchbutton" type="submit" class="layui-btn" lay-submit="" lay-filter="sreach"> <i class="layui-icon"></i></button> </div> </div> </div> </form>
當搜索條件傳入后台相應控制器時,除了注冊時間這種可能需要用whereTime特殊處理的條件外,其他的條件可以通過foreach遍歷構造where條件數組以多條件模糊查詢,不需要批量處理的用unset排除。 這里注意一定要排除掉分頁自帶的page參數。
由於想在換頁時保留搜索條件,所以不能直接使用paginate的simple模式,否則換頁時僅傳遞一個page參數,這里需要我們將paginate第二個參數設置為false,並將第三個參數中的query設置為Request::param()以將上一次接收到的搜索條件全部保留並作為下一次的請求參數隨page一並請求。
public function search()
{
$data = Request::param();
unset($data["page"]);
unset($data["create_time"]);
$whereMap = new Where;
foreach($data as $k=>$v)
$whereMap[$k] = ['like','%'.$v.'%'];
$list = Db::table('user')->where($whereMap)->whereTime(...["create_time",Request::param('create_time')])->
order('create_time','desc')->paginate(10,false,['query'=>Request::param()]);
$this->view->assign(['listnum'=>$list->total(),'list'=>$list]);
return $this->view->fetch('userlist');
}
這樣即便直接使用原生分頁在換頁時也不會丟失搜索條件,這里將搜索條件性別換為男並將鼠標放置第二頁上可以看到請求url中保留了所有參數