尝试在 Laravel 中进行多输入搜索

Posted

技术标签:

【中文标题】尝试在 Laravel 中进行多输入搜索【英文标题】:Trying to make multiple input Search in Laravel 【发布时间】:2020-05-10 05:01:54 【问题描述】:

我正在尝试制作一个有 4 列的laravel search。我要做的是,如果用户使用一个输入字段进行搜索,他们将获得相关结果,如果用户使用多个搜索输入字段,他们将获得相关结果。

这是我的表格:

<form action=" route('properties-list') " method="POST" role="search">
   @csrf
   <div class="row">
      <div class="col-lg-3 col-md-6 col-sm-6 col-6">
         <div class="form-group">
            <input style="height: 48px;" id="title" name="title" type="text" class="input-text form-control"
               placeholder="Search by Title">
         </div>
      </div>
      <div class="col-lg-3 col-md-6 col-sm-6 col-6">
         <div class="form-group">
            <select class="selectpicker search-fields" name="type">
               <option value=""> Category </option>
               <option value="Apartments"> Apartments </option>
               <option value="Houses"> Houses </option>
               <option value="Commercial"> Commercial </option>
               <option value="Garages"> Garages </option>
            </select>
         </div>
      </div>
      <div class="col-lg-3 col-md-6 col-sm-6 col-6">
         <div class="form-group">
            <input style="height: 48px;" id="datepicker" name="created_at" type="text"
               class="input-text form-control" placeholder="Date of Posting" autocomplete="false">
         </div>
      </div>
      <div class="col-lg-3 col-md-6 col-sm-6 col-6">
         <div class="form-group">
            <input style="height: 48px;" id="search_term" name="location" type="text" class="input-text form-control" placeholder="Search City,Area">
         </div>
      </div>
   </div>
   <div class="row p-3">
      <div class="col-lg-12 col-md-12 col-sm-6 col-12">
         <div class="form-group">
            <button class="search-button">Search</button>
         </div>
      </div>
   </div>
</form>

这是我的控制器:

public function homeSearch(Request $request)

    $title = $request->title;
    $type = $request->type;
    $created_at = $request->created_at;
    $location = $request->location;

if (empty($title) && empty($type) && empty($created_at) && empty($location)) 
    Session::flash('danger', "You didn't select any search any search.");
    return redirect()->back();


$properties = Property::where('title', 'LIKE', '%' . $title . '%')
    ->orWhere('type', $type)
    ->orWhere('location', 'LIKE', '%' . $location . '%')
    ->orWhere('created_at', 'LIKE', '%' . $created_at . '%')
    ->get();
dd($properties);

如果我曾经搜索标题“Note”,则根据以下逻辑: 我已经在我的数据库中保存了以下标题

想买 Note 10 plus

出售苹果手机

我想卖掉我的笔记 4

如果我使用 'where' 而不是 'orWhere',我会在我的 dd($properties) 中获取所有 3 个对象,有时它会给出我想要的结果,有时它会返回一个空对象。

这是参考搜索: https://yts.mx/browse-movies

【问题讨论】:

【参考方案1】:

使用when子句

见:https://laravel.com/docs/7.x/collections#method-when

$properties = Property::where('title', 'LIKE', '%' . request()->title . '%')
                        ->when(request()->type, function($query) 
                            $query->where('type', request()->type)
                        )
                        ->when(request()->location, function($query) 
                            $query->where('location', 'LIKE', '%' . request()->location . '%')
                        )
                        ->when(request()->created_at, function($query) 
                            $query->where('created_at', 'LIKE', '%' . request()->created_at . '%')
                        )->get();

【讨论】:

太棒了!刚刚在逻辑末尾添加了“get()”函数,我得到了我想要的结果。非常感谢^_^

以上是关于尝试在 Laravel 中进行多输入搜索的主要内容,如果未能解决你的问题,请参考以下文章

laraver框架学习------工厂模型填充测试数据

Vue.js:在 laravel 中实现 MPA(多页面应用程序)的最佳方式

数据库中的计算字段 - Laravel

php laravel框架学习笔记 基本工作原理

Larave中CSRF攻击

使用 Laravel 手动自动完成搜索,如何将信息传递给视图中的 div