Laravel: выборочные выпадающие списки - PullRequest
0 голосов
/ 07 апреля 2020

Так что мой выпадающий список работает так, что мне нужно выбрать оба варианта, чтобы он отображал список отелей на основе выбранных критериев (расстояние и цена), но я хочу убедиться, что пользователь сможет найти все отели на основе просто цена, например. Когда я делаю это, отели не появляются, и мой выпадающий список не совсем работает. Итак, как бы я точно внедрил код, который позволит пользователю выбирать все отели только по ОДНОМУ критерию.

SearchController. php

public function index(Request $request)
{
    $distances = DB::table('posts')->select('distance')->distinct()->get()->pluck('distance');
    $prices = DB::table('posts')->select('price')->distinct()->get()->pluck('price');

    $post = Post::query();

    if ($request->has('price')) {
        $post->where('price', $request->price);
    }

    if ($request->has('distance')) {
        $post->where('distance', $request->distance);
    }

    return view('Pages.search', [
        'distances' => $distances,
        'prices' => $prices,
        'posts' => $post->get(),
    ]);
}

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Вы пробовали использовать when?

public function index(Request $request)
{
    // Unnecessary select * changed to select only the columns you need.
    $distances = DB::table('posts')->select('distance')->distinct()->get(['distance'])->pluck('distance');
    $prices = DB::table('posts')->select('price')->distinct()->get(['price'])->pluck('price');

    $post = Post::when($request->has('price'), function ($query) use ($request) {
        $query->where('price', $request->price);
    })
    ->when($request->has('distance'), function ($query) use ($request) {{
        $query->where('distance', $request->distance);
    })
    ->get();

    /* php  >= 7.4
    $post = Post::when($request->has('price'), fn($query) => $query->where('price', $request->price))
    ->when($request->has('distance'), fn($query) => $query->where('distance', $request->distance))
    ->get();
    */

    return view('Pages.search', compact('distances', 'prices', 'post');
}
0 голосов
/ 07 апреля 2020

Таким образом, вместо использования has я просто реализовал «fill», и это обеспечило работоспособность моей фильтрации.

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