laravel 过滤器返回所有记录
Posted
技术标签:
【中文标题】laravel 过滤器返回所有记录【英文标题】:laravel filter return all the records 【发布时间】:2021-12-20 20:03:30 【问题描述】:我尝试使用三个输入进行搜索,在第一种情况下,当我使用所有输入进行搜索时它会返回结果,在第二种情况下,当我只使用一个字段进行搜索时,它会返回所有记录我想要做的是当我搜索一个字段时,它会返回一个特定的结果,
public function multiSearch(Request $request)
$search = $request->input('search');
$search_1 = $request->input('search_1');
$search_2 = $request->input('search_2');
$cars = Car::query()
->where('price', 'LIKE', "%$search%")
->orWhere('model', 'LIKE', "%$search_1%")
->orWhere('transmission', 'LIKE', "%$search_2%")
->get();
return view('car.car-multisearch', ['cars'=>$cars]);
这是我的刀片代码
<form type="get" action="url('/search-car')">
@csrf
<div class="row">
<div class="col-md-4">
<p>
<input type="text" name="search" placeholder="Price" />
</p>
</div>
<div class="col-md-4">
<p>
<input type="text" name="search_1" placeholder="Model Year" />
</p>
</div>
<div class="col-md-4">
<p>
<select name="search_2">
<option data-display="Transmission">Transmission</option>
<option value="Automatic">Automatic</option>
<option value="Manual">Manual</option>
</select>
</p>
</div>
<button type="submit" class="gauto-theme-btn">Find Car</button>
</div>
</form>
【问题讨论】:
【参考方案1】:您可以根据values presence in the request and if they are not empty 动态地将 where 语句添加到您的查询中。示例:
public function multiSearch(Request $request)
$cars = Car::query();
if ( $request->filled('search') )
$cars->where('price', 'LIKE', "%$request->input('search')%");
if ( $request->filled('search_1') )
$cars->orWhere('model', 'LIKE', "%$request->input('search_1')%");
if ( $request->filled('search_2') )
$cars->orWhere('transmission', 'LIKE', "%$request->input('search_2')%");
return view('car.car-multisearch', ['cars'=> $cars->get() ]);
这个解决方案可以完成这项工作,但看起来不太好,因为您需要为每个过滤器添加更多 if 语句。)
【讨论】:
以上是关于laravel 过滤器返回所有记录的主要内容,如果未能解决你的问题,请参考以下文章