因此,我的下拉列表可以使我选择两个选项,以便根据所选条件(距离和价格)显示酒店列表,但是我想确保用户可以根据以下条件找到所有酒店例如价格。当我这样做时,没有显示任何酒店,并且我的下拉列表无法正常运行。因此,我将如何准确地实现使用户仅根据一个条件选择所有酒店的代码。
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(),
]);
}
答案 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”,这确保了我的过滤工作正常。