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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:15:03