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

Laravel双表批量插入报错及仅插入一行问题求助

问题分析与解决方案

错误根源

  1. 主表字段误用数组命名:视图中date[]、ab[]、school[]、behora[]是主表Biniyojan的字段(仅需单条记录),加[]导致控制器接收数组,赋值给字符串类型数据库字段时触发Array to string Conversion错误。
  2. 详情表实例重复复用:循环中未每次创建新的BiniyojanDetails实例,复用同一实例时Eloquent内部参数处理异常,抛出Illuminate\Database\Grammar::parameterize()类型错误。
  3. 前端JS包含未解析Blade语法:动态添加表单的JS代码里写了@foreach,服务器端不会解析前端脚本中的Blade语法,导致新增的下拉框无选项。

修复代码

1. 控制器修改(bbcreate方法)

public function bbcreate(Request $request)
{
    // 创建主表Biniyojan记录
    $biniyojan = new Biniyojan();
    // 主表字段取单个值(已去掉视图中的[])
    $biniyojan->date = $request->date;
    $biniyojan->ab = $request->ab;
    $biniyojan->school = $request->school;
    $biniyojan->behora = $request->behora;
    $biniyojan->save();

    // 批量插入详情表记录
    if ($request->has('source') && is_array($request->source)) {
        foreach ($request->source as $index => $value) {
            // 每次循环新建详情表实例
            $detail = new BiniyojanDetails();
            $detail->biniyojan_id = $biniyojan->id;
            $detail->school = $request->school; // 主表的school值,若详情表需要每行不同则调整
            $detail->source = $request->source[$index];
            $detail->kriyakalap = $request->kriyakalap[$index];
            $detail->cash = $request->cash[$index];
            $detail->save();
        }
    }

    return redirect()->back()->with('status', 'Inserted');
}

2. 视图Blade修改

去掉主表字段的[],并保持表单结构合理性:

<form method="POST" action="{{ route('bbcreate') }}">
    @csrf
    <div class="form-row col-x1-3">
        <div class="form-group col-md-2">
            <input type="date" placeholder="मिति" value="{{ $today }}" name="date" class="form-control" id="inputCity" required>
        </div>
        <div class="form-group col-md-2">
            <select id="inputState" placeholder="" name="ab" class="form-control" required>
                <option>2079-080</option>
                <option>2078-079</option>
            </select>
        </div>
        <div class="form-group col-md-2">
            <select id="inputState" name="school" class="form-control" required>
                <option selected disabled>स्रोत पाउने संस्था </option>
                @foreach ($school_array as $sch)
                <option value="{{ $sch->name }}">{{ $sch->name}}</option>
                @endforeach
            </select>
        </div>
    </div>
    <div id="form-field">
        <div class="form-row col-x1-3">
            <div class="form-group col-md-2">
                <select name="source[]" class="form-control" required>
                    <option selected disabled value="">स्रोत</option>
                    <option>केन्द्र</option>
                    <option>प्रदेश</option>
                    <option>स्थानीय</option>
                    <option>अन्य</option>
                </select>
            </div>
            <div class="form-group col-md-2">
                <select name="kriyakalap[]" class="form-control" required>
                    <option selected disabled>क्रियाकलाप</option>
                    @foreach ($bini as $bi)
                    <option value="{{$bi->kriyakalap}}"> {{$bi->kriyakalap}}</option>
                    @endforeach
                </select>
            </div>
            <div class="form-group col-md-2">
                <select name="debit_credit[]" class="form-control" required>
                    <option selected disabled>डेबिट / क्रेडिट</option>
                </select>
            </div>
            <div class="form-group col-md-2">
                <select name="debit_credit_type[]" class="form-control" required>
                    <option selected disabled>डेबिट / क्रेडिट प्रकार</option>
                </select>
            </div>
            <div class="form-group col-md-2">
                <input type="text" placeholder="रकम" name="cash[]" class="form-control" required>
            </div>
            <div class="form-group col-md-2">
                <input type="button" class="btn btn-success" name="add" id="add" value="+">
            </div>
        </div>
    </div>
    <div class="form-row col-x1-3" style="justify-content:left ;">
        <div class="form-group col-md-2">
            <input type="text" placeholder="ब्यहोरा" name="behora" class="form-control" id="behora" required>
        </div>
        <div class="form-group col-md-2">
            <input type="submit" id="submit" name="submit" value="राख्नुहोस्" class="btn btn-primary ">
        </div>
        @if (session('status'))
        <div class="alert alert-success">
            {{ session('status') }}
        </div>
        @endif
    </div>
    <div form-row col-x1-3 id="showdata" class="showdata">
        <p class="show_data"></p>
        <p id="showdata" class="showdata"></p>
    </div>
</form>

3. jQuery代码修改

提前渲染kriyakalap下拉框的选项,避免在JS中使用Blade语法:

<script type="text/javascript">
$(document).ready(function() {
    // 提前从Blade渲染好选项HTML
    var kriyakalapOptions = `
        <option selected disabled>क्रियाकलाप</option>
        @foreach ($bini as $bi)
        <option value="{{$bi->kriyakalap}}"> {{$bi->kriyakalap}}</option>
        @endforeach
    `;
    // 动态添加的表单HTML,使用预渲染的选项
    var html = `<span><div class="form-row col-x1-3"> 
        <div class="form-group col-md-2"> 
            <select name="source[]" class="form-control" required> 
                <option selected disabled value="">स्रोत</option> 
                <option>केन्द्र</option> 
                <option>प्रदेश</option> 
                <option>स्थानीय</option> 
                <option>अन्य</option> 
            </select> 
        </div> 
        <div class="form-group col-md-2"> 
            <select name="kriyakalap[]" class="form-control" required>
                ${kriyakalapOptions}
            </select> 
        </div> 
        <div class="form-group col-md-2"> 
            <select name="debit_credit[]" class="form-control" required> 
                <option selected disabled>डेबिट / क्रेडिट</option> 
            </select> 
        </div> 
        <div class="form-group col-md-2"> 
            <select name="debit_credit_type[]" class="form-control" required> 
                <option selected disabled>डेबिट / क्रेडिट प्रकार</option> 
            </select> 
        </div> 
        <div class="form-group col-md-2"> 
            <input type="text" placeholder="रकम" name="cash[]" class="form-control" required> 
        </div> 
        <div class="form-group col-md-2"> 
            <input type="button" class="btn btn-danger" name="remove" value="-"> 
        </div> 
    </div></span>`;
    var max = 5;
    var x = 1;
    $("#add").click(function() {
        if (x <= max) {
            $("#form-field").append(html);
            x++;
        }
    })
    $("#form-field").on('click', '[name="remove"]', function() {
        $(this).closest('span').remove();
        x--;
    });
});
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:45:48