@kfedor

Как обработать форму поиска?

Доброго времени суток. Нужно обработать форму поиска и выдавать значения в зависимости от параметров формы.

Имеется такая форма:
67f0195c642b445695dec3679f953a77.png

<form name="searchForm" id="searchForm" action="{{ route('search') }}" method="post">

                {{ csrf_field() }}

                <div class="form-group">
                    <input type="text" name="searchString" id="searchString" class="form-control" placeholder="Поиск..." autofocus>
                </div>

                <div class="form-group">
                    <label for="sex">Пол:</label>

                    <input type="checkbox" name="man" value="male" checked> Муж
                    <input type="checkbox" name="woman" value="female" checked> Жен
                </div>

                <div class="form-group">
                    <label for="age">Возраст:</label>
                    <input type="text" id="ageFrom" name="ageFrom" placeholder="С">
                    <input type="text" id="ageTo" name="ageTo" placeholder="По">
                </div>

                <div class="form-group">
                    <input type="submit" name="submitBtn" id="submitBtn" value="Поиск" class="btn btn-default">
                </div>
            </form>


и метод, который ее обрабатывает:

public function search(Request $request)
    {

//        dd($request->man);

        $users = User::where(function ($query) use ($request) {
            $query->where('first_name', 'like', '%'.$request->searchString.'%')->
                    orWhere('last_name', 'like', '%'.$request->searchString.'%')->
                    orWhere('middle_name', 'like', '%'.$request->searchString.'%')->get();
        })->where(function ($query) use ($request) {
            if ($request->man && $request->woman) {
                $query->where('sex', 'male')->where('sex', 'female');
            } elseif ($request->man && !$request->woman) {
                $query->where('sex', 'man');
            } elseif (!$request->man && $request->woman) {
                $query->where('sex', 'female');
            } else {
                $query->where('sex', null);
            }
        })->where(function ($query) use ($request) {

        })->paginate(2);

        return view('user.index')->withUsers($users);
    }


Как мне построить запрос query builder, чтобы оно заработало?
  • Вопрос задан
  • 309 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Kostik_1993
Web Developer
Для начала замените это
if ($request->man && $request->woman) {
    $query->where('sex', 'male')->where('sex', 'female');
} elseif ($request->man && !$request->woman) {
    $query->where('sex', 'man');
} elseif (!$request->man && $request->woman) {
    $query->where('sex', 'female');
} else {
    $query->where('sex', null);
}


На это
if ($request->man) {
    $query->where('sex', 'man');
} 
if ($request->woman) {
    $query->where('sex', 'female');
}

А чекбокс поменяйте на радио
Ответ написан
Комментировать
chelkaz
@chelkaz
Вы сами все усложнили, вам нужно просто в where передать массив, чекбоксов и все. Например:
$users = DB::table('users')->where([
// То есть сюда массив с тем, что там у вас в форме на выбирали при поиске и все.
    ['sex', 'man'],
    ['sex', 'female'],
])->get();


Вот пример для одного поля массив значений, в выше для многих полей. Вам этот пример нужен
тогда:
$users = DB::table('users')
// ['man', 'female'] Это массив с реквеста, тут может быть и null и man и сразу все вместе... и что вам нужно
                    ->whereIn('sex', ['man', 'female'])
                    ->get();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы