我有查询类似下面,它获取记录。
$posts = User::whereHas('roles', function($q)use($search){
$q->where('name', '=', 'agent')
->where('first_name', 'like', "%".$search."%")
->orWhere('last_name','like',"%".$search."%")
->orWhere('created_at','like',"%".$search."%");
})->limit($limit)
->orderBy($order,$dir)
->get();
我我使用了分页上面的查询手段来获得未来的10条记录,但它不工作。
以下变量从阿贾克斯发布
$limit = $request->input('length');
$start = $request->input('start');
$order = $columns[$request->input('order.0.column')];
$dir = $request->input('order.0.dir');
阿贾克斯工作正常,但我总是得到前10个记录,当我提交未来的10条记录。可有人好心帮。谢谢
你有两个问题:你从来没有传递的偏移量,所以你总是得到相同的10条记录。和你混的AND / OR值,所以它不会限制名称来代理。因此,要解决这个问题,通过在手术室又一圈地:
$posts = User::whereHas('roles', function($q)use($search){
$q->where('name', '=', 'agent')
->where(function($query) use ($search) {
$query->where('first_name', 'like', "%".$search."%")
->orWhere('last_name','like',"%".$search."%")
->orWhere('created_at','like',"%".$search."%");
});
})
->offset($start)
->limit($limit)
->orderBy($order,$dir)
->get();
对于单键,你可以像这样多列搜索:
$employee = Employee::whereHas('roles', function ($query) {
$query->where('name', '=', 'developer');
})
->where(function ($q) use ($search) {
if ($search != '') {
$query->where('employee_name', 'LIKE', '%' . $search . '%');
$query->orWhere('email', 'LIKE', '%' . $search . '%');
$query->orWhere('phone', 'LIKE', '%' . $search . '%');
}
$query->Where('type', '2');
})
->offset($start)
->limit($limit)
->orderBy('employee_name')
->get();