尝试在 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 中进行多输入搜索的主要内容,如果未能解决你的问题,请参考以下文章