You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel搜索下拉框无法保留选中值问题求助

解决Laravel下拉框提交后不保留选中值的问题

问题原因

  1. 你在Blade视图中使用了old('rumah_id'),但该函数默认读取的是POST请求的session闪存数据,而你的表单是GET提交,无法通过old()获取当前请求的参数,导致选中状态无法保留。
  2. 原代码中的@if判断没有给匹配的option添加selected属性,即使逻辑正确也不会显示选中效果。

修复方案

1. 修改Blade视图的表单代码

直接通过request()->rumah_id获取当前GET请求的参数,为匹配的option添加selected属性:

<form action="" method="get">
    <select class="form-select" name="rumah_id" id="rumah_id">
        <!-- 处理Select All的选中状态 -->
        <option value="" {{ request()->rumah_id == '' ? 'selected' : '' }}>Select All</option>
        
        @foreach($rumahs as $rumah)
            <option value="{{ $rumah->id }}" {{ request()->rumah_id == $rumah->id ? 'selected' : '' }}>
                {{ $rumah->alamat }}
            </option>
        @endforeach
    </select>
    <!-- 添加提交按钮(如果之前没加的话) -->
    <button type="submit" class="mt-2">搜索</button>
</form>

2. 优化控制器代码

  • 补充get()方法执行查询(原代码仅构建了查询构造器,未实际获取数据)
  • 对rumah_id使用精确匹配(id是整数主键,无需模糊查询):
public function index(Request $request){
    $rumahs = Rumah::all();
    $mobils = Mobil::with(['rumah'])
        ->orderBy('rumah_id', 'asc')
        ->when($request->rumah_id, function($q) use($request){
            return $q->where('rumah_id', $request->rumah_id);
        })
        ->get();

    return view('mobil/index', compact('mobils', 'rumahs'));
}

额外说明

  • 显式指定表单的method="get",避免默认行为的歧义
  • 如果你之后需要切换为POST请求,才需要使用old(),同时控制器要做重定向并闪存数据,但当前场景用GET更符合搜索功能的语义

内容的提问来源于stack exchange,提问作者Muhammad Trian Syahputra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:55:28