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

Laravel中通过循环实现下拉选值后输出数据库对应值的方法

实现方案如下:

1. 把后端产品数据注入到前端JS

直接用Laravel自带的@json指令,把product_data集合按name字段为键转成JS全局对象,方便前端快速查找对应产品的属性:

<!-- 放在页面头部或者所有JS代码之前 -->
<script>
const productMap = @json($product_data->keyBy('name'));
</script>

2. 修改Blade模板表单代码

修正原有代码的拼写错误,补充缺失的原价展示字段,删除数量下拉的静态选项:

<div class="form-group row">    
     <label>选择里程区间: </label>
    <select class="form-select" name="mileage" id="mileage" onchange="getOption()">
        @foreach ($product_data as $p)
        <option value="{{$p->name}}">{{$p->name}}</option>
        @endforeach
    </select>           
</div>
<div class="form-group row">   
     <label>可用数量: </label>
    <input type="text" class="form-control" readonly name="available_qty" id="available_qty"/>
</div>
<!-- 新增原价展示字段,对应表的original_Price字段 -->
<div class="form-group row">   
     <label>原价格: </label>
    <input type="text" class="form-control" readonly name="original_Price" id="original_Price"/>
</div>
<div class="form-group row">  
     <label>选择购买数量: </label>
    <select class="form-select" name="quantity" id="quantity" >
        <!-- 这里的选项由JS动态生成 -->
    </select>           
</div>                                  

<div class="form-group row">
    <label for="inputBid" class="col-sm-2 col-form-label" >输入报价</label>
    <div class="col-sm-10">
      <input type="number" class="form-control" id="inputBid" name="bid"  />
    </div>
</div>

3. 重写JS逻辑实现动态联动

修改getOption函数,实现选中name后自动填充对应属性、动态生成数量选项:

function getOption() {
    // 获取选中的name值
    const selectedName = document.getElementById('mileage').value;
    // 从全局产品Map中拿到对应产品的所有属性
    const product = productMap[selectedName];
    // 填充可用数量和原价
    document.getElementById('available_qty').value = product.number_of_products;
    document.getElementById('original_Price').value = product.price;
    
    // 动态生成数量下拉选项,范围1到对应产品的number_of_products
    const quantitySelect = document.getElementById('quantity');
    quantitySelect.innerHTML = ''; // 先清空原有选项
    for(let i = 1; i <= product.number_of_products; i++) {
        const option = document.createElement('option');
        option.value = i;
        option.textContent = i;
        quantitySelect.appendChild(option);
    }
}

// 页面加载完成后默认触发一次,初始化第一个选项的对应数据
window.onload = function() {
    getOption();
}

4. 后端存储逻辑

首先确认BidPrice模型已经把需要存储的字段加入$fillable允许批量赋值:

// app/Models/BidPrice.php
protected $fillable = [
    'name',
    'number_of_products',
    'bid_price',
    'original_Price'
];

然后在对应的控制器方法中接收表单参数存入数据库即可:

public function store(Request $request)
{
    // 参数校验
    $validated = $request->validate([
        'mileage' => 'required|string',
        'quantity' => 'required|integer|min:1',
        'bid' => 'required|numeric|min:0',
        'original_Price' => 'required|numeric',
    ]);

    // 写入bid_price表
    BidPrice::create([
        'name' => $validated['mileage'],
        'number_of_products' => $validated['quantity'],
        'bid_price' => $validated['bid'],
        'original_Price' => $validated['original_Price'],
    ]);

    return back()->with('success', '报价提交成功');
}

内容的提问来源于stack exchange,提问作者CodeHunt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:57:03