Laravel 8.*如何通过外键id获取表列对应值 下拉框显示名称提交id
解决方案
这个需求是表单关联字段的常规实现,完全可以做到,你只需要调整option标签的结构即可,具体修改步骤如下:
1. 优化控制器传参(可选,建议调整)
你当前视图里循环的城市列表变量名和循环项变量名冲突,建议控制器传参时把城市集合的变量名改为$cities,避免歧义,控制器参考代码:
// 编辑页控制器示例 public function edit($id) { $data = 你的主业务模型::findOrFail($id); $cities = City::query()->get(); // 查询所有城市关联数据 return view('你的视图路径', compact('data', 'cities')); }
2. 修改表单select部分代码
option标签的value属性是表单提交时实际传递的值,标签内部的内容是给用户展示的内容,同时补充编辑状态下的自动选中逻辑,修改后的代码如下:
<div class="form-group col-md-4"> <label for="inputState">城市</label> <select id="inputState" name="city_id" class="form-control"> <option value="">请选择城市</option> @foreach($cities as $city) <option value="{{ $city->id }}" @selected(old('city_id', $data->city_id) == $city->id) > {{ $city->name }} </option> @endforeach </select> </div>
补充说明
- 代码里的
$city->name需要替换为你城市表中实际存储城市名称的字段名,比如city_name等。 @selected是Laravel 9+提供的Blade指令,如果你用的是更低版本的Laravel,可以替换为{{ old('city_id', $data->city_id) == $city->id ? 'selected' : '' }},效果完全一致。- 这里加的
old()方法是为了处理表单校验失败回退的场景,会自动保留用户上次选择的值,不会直接重置为数据库原始值,优化使用体验。 - 你提到的这种实现的通用专业称呼是关联模型字段表单映射,是后台数据新增/编辑页的常用功能。
内容的提问来源于stack exchange,提问作者MichalGrab
相关产品推荐
相关产品推荐

