Laravel 5.3 Расширенный поиск

В моем проекте 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 ответа

Вам нужно использовать метод '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);

Если вы используете соглашения Laravel, то я ожидаю, что имена столбцов будут table_1.category_id а также table_1.location_id, Если $category а также $location это целочисленные идентификаторы этих записей, тогда они должны работать так, как вы ожидаете.

Другие вопросы по тегам