Laravel красноречивый поиск / фильтрация - PullRequest
2 голосов
/ 08 января 2020

Я реализую функцию фильтрации / поиска для моего профиля фильма, я пришел из symfony фона и просто изучаю laravel, когда я go, у меня был бы этот запрос в новом репозитории, например FilmRepository чтобы запрос оставался отдельным, а контроллер был менее загроможденным

мой первый вариант состоял в том, чтобы создать запрос на присоединение в репо, который объединяет все эти таблицы вместе, но что, если я хочу, чтобы он фильтровал / выполнял поиск даже в определенном раскрывающемся списке вариант не выбран? Я не знаю, как справиться с этой функцией

Это грубая функция репо, которую я создал, которая требует дополнительной работы

Репозиторий

 public function searchFilms()
    {
        $films= Film::from('films')
            ->join('categories', 'films.id', '=', 'categories.film_id')
            ->join('locations', 'id', '=', 'location.id')
            ->join('age_rating', 'id', 'age_rating.id')
            ->orderBy('updated_at', 'desc');
    }

Я знаю, что мне понадобятся эти параметры фильтра в качестве параметров запроса. Как мне сделать это в laravel?

Могу ли я получить некоторую помощь по решению этого решения? спасибо

1 Ответ

0 голосов
/ 09 января 2020

В laravel действиях контроллера можно получить объект Request в качестве параметра, который можно использовать для извлечения фильтров из вашего интерфейса.

public function searchFilms(Request $request)
{ 
    $data = $request->all();
    $user = Auth::user();

    return FilmResource::collection($this->repository->searchFilms($data));
}

класс запроса имеет несколько способов получения своего данные, вы можете прочитать это , чтобы узнать о них, но, -> все () (подробнее об этом здесь является одним из способов.

Затем передать данные в вашу функцию searchFilms и применить фильтры

 public function searchFilms($filters)
 {
        $films= Film::from('films')
            ->join('categories', 'films.id', '=', $filters['film_id'])
            ->join('locations', 'id', '=', $filters['location_id'])
            ->join('age_rating', 'id', $filters['age_rating_id'])
            ->orderBy('updated_at', 'desc');
 }

Что-то подобное сработало бы, я не знаю названия ваших входов, но вы могли бы понять из этого.

Edited

Итак, чтобы уточнить ваш вопрос в комментариях.

$ request-> all () вернет массив ваших опубликованных данных, в котором имя вашего атрибута входные данные будут ключом для каждого значения. Так, например, допустим, у меня есть следующая форма html:

<form>
 <input name="name" type="text" value="john doe" />
 <input name="age" type="text" value="39" />
</form>

$request->all() будет массивом, подобным этому ['title' => 'john doe', 'age' => '39'];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...