首先貼上後臺頁面相應模塊的列表頁效果以及多條件搜索的表單代碼
前端模版採用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中保留了所有參數