刀片中的selectBox过滤器Laravel

时间:2019-01-08 13:05:03

标签: php laravel laravel-5

我正在尝试通过刀片中的选择框添加分类系统。我按选择进行了价格排序,但无法按区域进行过滤。

<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'));
}

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以将html更改为在下拉列表中具有ascdesc值。

<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,否则在运行回调之后这些值将不会持久。