Фильтр selectBox в лезвии, Laravel - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь добавить систему сортировки, выбрав поле на блейде. Я сделал сортировку цен по выбору, но не смог отфильтровать по регионам.

<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>

Сортировка по цене работает, но фильтр "регион" не работает. когда я выбираю город и нажимаю кнопку. Это не приносит мне подходящих результатов. Я думаю, что в контроллере, области запроса части я сделал некоторую ошибку.

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 голосов
/ 08 января 2019

Вы можете изменить 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) по ссылке вместо значения, иначе значения не сохранятся после выполнения обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...