Laravel 5.3高级搜索查询

时间:2017-02-27 03:45:12

标签: laravel select where-clause

在我的Laravel 5.3项目中,我有一个包含一个文本框(关键字)的表单,以及两个选择下拉列表(类别和位置)。我正在尝试在我的控制器中构建select子句,但是当我将table_1.category或table_1.location放在哪里时,它不起作用。

    $keys       = \Request::get('keyword');
    $category   = \Request::get('category');
    $location   = \Request::get('location');

    $myrecord = mytable_1::join('table_2', 'table_2.user_id', '=', 'table_1.user_id')
        ->where(function ($query) {
            $keys = \Request::get('keyword');
            $query->where('table_1.title', 'like','%'.$keys.'%')
                  ->orWhere('table_2.company', 'like','%'.$keys.'%');
        })
        ->where('table_1.category', $category)
        ->where('table_1.location', $location)
        ->select('table_2.*', 'table_1.*')
        ->paginate(30);

请告知实现此目的的方法。 感谢

2 个答案:

答案 0 :(得分:1)

你需要使用' use()'将参数传递到where查询的方法...如果参数包含数组,则可以使用foreach循环。我认为它会起作用......

    $keys  = \Request::get('keyword');
    $category   = \Request::get('category');
    $location   = \Request::get('location');

    $myrecord = mytable_1::join('table_2', 'table_2.user_id', '=','table_1.user_id')
    ->where(function($query) use ($keys){
        $query->where('table_1.title', 'like','%'.$keys.'%')
        ->orWhere('table_2.company', 'like','%'.$keys.'%');
    })

    ->where('table_1.category', $category)
    ->where('table_1.location', $location)
    ->select('table_2.*', 'table_1.*')
    ->paginate(30);

答案 1 :(得分:0)

如果您正在使用Laravel约定,那么我希望列名称为table_1.category_idtable_1.location_id。如果$category$location是这些记录的整数ID,那么它应该按您期望的方式工作。