TransWikia.com

как правильно сделать обработчик search фильтер(получаемый из GET запроса) в контроллере laravel?

Stack Overflow на русском Asked on December 30, 2021

всем привет,

Есть форма поля могут быть разные и любого количества

Запрос в браузерной строке вида
http://127.0.0.1:8000/search-profiles?searchID=&ageFrom=&ageTo=&country=

<div class="col-lg-12">
        <form action="{{url('/search-profiles')}}">
            <ul class="searchList clearfix align-l">
               <li class="textToUpperCase searchProfileHeader">Search profile</li>
               <li class="textToUpperCase searchIDField">
                  <span>Id</span>
                  <input type="text" class="searchID" name="searchID" id="" value="">
               </li>
               <li class="alterField">
                  <span>Age</span>
                  <input type="text" name="age1" class="alter1" id="" placeholder="From" value="">
                  <input type="text" name="age2" class="alter2" id="" placeholder="To" value="">
               </li>
               <li class="textToUpperCase searchIDField">
                  <span>Country</span>
                  <input type="text" class="searchID" name="country" id="" value="">
               </li>
               <li class="searchButtonBlock">
                  <button class="textToUpperCase searchButton">Search</button>
               </li>
               
            </ul>
        </form>
    </div>
 public function search_profiles(Request $request)
    {
        //Здесь получим все переданные параметры 
        $id = $request->id;
        $ageFrom = $request->ageFrom;
        $ageTo = $request->ageTo;
        $country = $request->country;
        
        //Это страница шаблон на которой будут выводится профили $profiles
        $page = Page::where('slug', '/')->first();
        
        
        //Как тут формировать правильно чтобы если ищем по всем полям то показываем профили которые соответствуют всем полям
//если никакое не передано т.е пустые то искать по умолчанию к примеру все активные и  т.д.
        // если какое то одно передали значит только 1  и т.д.
        $profiles = Profile::where('id', $id)->where('ageFrom', $ageFrom)->where('ageTo', $ageTo)->where('country', $country)->get();
        
        return view('profiles', compact('page', 'profiles'));
    }

Спасибо!

One Answer

Советую ознакомиться с данным списком хороших практик: https://github.com/alexeymezenin/laravel-best-practices/

В частности:

  1. Валидация
  2. Используйте массовое заполнение (mass assignment)

Также, стоит глянуть как лучше именовать методы:
https://laravel.demiart.ru/laravel-naming-conventions/

По поводу Profile::where, после правильной валидации вы можете отправить $request->validated() в where() не перебирая каждое значение.

Answered by Evgeniy Kuznetsov on December 30, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP