Laravel:选择性下拉列表

时间:2020-04-07 09:16:18

标签: laravel

因此,我的下拉列表可以使我选择两个选项,以便根据所选条件(距离和价格)显示酒店列表,但是我想确保用户可以根据以下条件找到所有酒店例如价格。当我这样做时,没有显示任何酒店,并且我的下拉列表无法正常运行。因此,我将如何准确地实现使用户仅根据一个条件选择所有酒店的代码。

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 个答案:

答案 0 :(得分:1)

您是否尝试过使用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');
}

答案 1 :(得分:0)

因此,我没有使用“ has”,而是简单地实现了“ filled”,这确保了我的过滤工作正常。