我有如下查询,它获取记录。
$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条记录,但它不起作用。
以下变量是从ajax发布的
$limit = $request->input('length');
$start = $request->input('start');
$order = $columns[$request->input('order.0.column')];
$dir = $request->input('order.0.dir');
Ajax工作正常,但是提交下10条记录时,我总是会得到前10条记录。有人可以帮忙吗?谢谢
答案 0 :(得分:3)
对于使用单键搜索多列,您可以执行以下操作:
$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();
答案 1 :(得分:2)
您有两个问题:您永远不会传递偏移量,因此您将始终获得相同的10条记录。并且您混合使用AND / OR,这样就不会将名称限制为座席。因此,要解决此问题,请在其他机柜中传递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();