Laravel搜索查询并使用雄辩不工作

问题描述 投票:0回答:2

我有查询类似下面,它获取记录。

$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条记录。可有人好心帮。谢谢

php laravel laravel-5
2个回答
2
投票

你有两个问题:你从来没有传递的偏移量,所以你总是得到相同的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();

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();
© www.soinside.com 2019 - 2024. All rights reserved.