Laravel搜索查询无法使用后续

时间:2019-01-09 15:09:53

标签: php laravel laravel-5

我有如下查询,它获取记录。

$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条记录。有人可以帮忙吗?谢谢

2 个答案:

答案 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();