我正在尝试通过刀片中的选择框添加分类系统。我按选择进行了价格排序,但无法按区域进行过滤。
<form>
{{csrf_field()}}
<select name="sortbyprice">
<option selected>販売価格</option>
<option value="asc">最低価格</option>
<option value="desc">最大価格</option>
</select>
<select name="region">
<option value="tokyo">Tokyo</option>
<option value="osaka">Osaka</option>
<option value="kobe">Kobe</option>
</select>
<button type="submit">検索</button>
</form>
按价格排序,但过滤器“区域”不起作用。当我选择城市并按下按钮时。它没有给我带来匹配的结果。我认为在控制器中,Region查询部分我犯了一些错误。
public function search(Request $request)
{
$q = $request->q;
$sortbyprice = $request->sortbyprice;
$region = $request->region;
$paginationData = [
'q' => $q
];
$estates = \DB::table('allestates')
->where('lat', '!=', '')
->where('lng', '!=', '')
->where('price', '!=', '')
->where(function($query) use ($q) {
$query->where("building_name", "LIKE", "%" . $q . "%")
->orWhere("address", "LIKE", "%" . $q . "%")
->orWhere("company_name", "LIKE", "%" . $q . "%")
->orWhere("region", "LIKE", "%" . $q . "%");
})
->when($sortbyprice, function($query, $order) use ($paginationData) {
if(!in_array($order, ['asc','desc'])) {
$order = 'asc';
}
$paginationData['sortbyprice'] = $order;
return $query->orderBy('price', $order);
}, function($query) {
return $query->orderBy('price');
})
->when($region, function($query, $regionId) use ($paginationData) {
$paginationData['region'] = $regionId;
return $query->where('region_id', $regionId);
})
->paginate(8);
$paginationData = array_filter($paginationData);
return view("home", compact('estates', 'q','paginationData'));
}
谢谢您的帮助!
答案 0 :(得分:0)
您可以将html更改为在下拉列表中具有asc
或desc
值。
<select name="sortbyprice">
<option value="asc">Lowest First</option>
<option value="desc">Highest First</option>
</select>
<select name="region">
<option value="tokyo">Tokyo</option>
<option value="osaka">Osaka</option>
<option value="kobe">Kobe</option>
</select>
<input name="q" type="button">
在您的控制器中,您还需要use (&$paginationData)
by reference而不是value,否则在运行回调之后这些值将不会持久。