php - 如何通过laravel将html表中的数据存储到mysql中

标签 php mysql laravel

我有一个动态可排序表,我可以在其中添加或删除行,例如 enter image description here

enter link description here

现在我正在努力将这些数据插入我的数据库(Mysql)。

这是我的查看页面

<table class="table table-hover table-sortable" id="tab_logic" name="DataTable">
    <thead>
    <tr class="text-center">
        <td style="width: 40%;">Process Name</td>
        <td style="width: 30%;">Machine Name</td>
        <td style="width: 10%;">Machine Qty</td>
        <td style="width: 10%;">SMV</td>
        <td style="width: 10%;">Action</td>
    </tr>
    </thead>
    <tbody>
    <tr id='addr0' data-id="0" class="hidden">
        <td data-name="ProcessName">
            {{Form::text('ProcessName', '', ['id'=>'ProcessName', 'class' => 'form-control', 'placeholder'=>''])}}
        </td>
        <td data-name="MachineName">
            <div class="form-group row-fluid m-auto">
                <select name="MachineName" class="form-control" id="MachineName" data-live-search="true">
                    <option value=""></option>
                    @foreach($machineName as $machineName)
                    <option value="{{$machineName->id}}">{{$machineName->MachineName}}</option>
                    @endforeach
                </select>
            </div>
        </td>
        <td data-name="MachineQty">
            {{Form::number('MachineQty', '', ['id'=>'MachineQty', 'class' => 'form-control', 'placeholder'=>''])}}
        </td>
        <td data-name="SMV">
            {{Form::number('SMV', '', ['id'=>'SMV', 'class' => 'form-control', 'placeholder'=>''])}}
        </td>
        <td data-name="del">
            <a name="del0" id="del0" class="btn btn-outline-danger row-remove"  value="del0">Delete</a>
            {{-- <button name="del0" class='btn btn-outline-danger row-remove'>Delete</button> --}}
        </td>
    </tr>
    </tbody>

    <tfoot>
    <tr>
        <td colspan="5" style="text-align: left;">
            <a id="add_row" class="btn float-right btn-lg btn-block btn-outline-secondary">Add Row</a>
        </td>
    </tr>
    <tr>
        <td colspan="5" style="text-align: left;">
            {{Form::submit('Save', ['class'=>'btn btn-lg btn-outline-primary btn-block', 'name'=>'ProductInsert'])}}
        </td>
    </tr>
    </tfoot>
</table>

这是我的 Controller

// Create Post
$work_breakdown = new work_breakdown;
$work_breakdown->Buyer = $request->input('Buyer');
$work_breakdown->Style = $request->input('Style');
$work_breakdown->Item = $request->input('Item');
$work_breakdown->Size = $request->input('Size');
$work_breakdown->ThreadType = $request['Thread'];
$work_breakdown->Description = $request->input('Description');
$work_breakdown->ProductImage = $fileNameToStore;
$work_breakdown->user_id = auth()->user()->id;
$work_breakdown->save();


$maxValue = work_breakdown::max('id');
$i = 0;
$ProcessName_ID = $request->input('MachineName');
foreach($ProcessName_ID as $key => $MachineName) {

    $i++;
// Create Post
    $work_breakdown = new work_breakdown;
    $work_breakdown->ProductID = $maxValue;
    $work_breakdown->MachineID = $MachineName;
    $work_breakdown->ProcessName = $request->input('ProcessName');
    $work_breakdown->MachineQty = $request['MachineQty'];
    $work_breakdown->SMV = $request['SMV'];
    $work_breakdown->user_id = auth()->user()->id;
    $work_breakdown->save();
}

我发现这个错误: “为 foreach() 提供的参数无效”

enter image description here

最佳答案

当我第一次开始传递数组作为表单输入时,这是一个棘手概念的典型示例。它是 this question 的变体,但您可以将其留空以创建 0 索引数组,而不是定义键。

您的表单中的每一行都需要有一个“类似对象”的格式。在 JSON 中,您需要将其发送到服务器:

[
  {
    "ProcessName": "First process",
    "MachineID": "123",
    "MachineQty": "1",
    "SMV": "10"
  },
  {
    "ProcessName": "Second process",
    "MachineID": "456",
    "MachineQty": "2",
    "SMV": "20"
  }
]

要在 html 中实现此目的,您需要使用 html 输入的 name 属性。

<tr id='addr0' data-id="0" class="hidden">
    <td data-name="ProcessName">
        {{Form::text('items[][ProcessName]', '', ['id'=>'ProcessName', 'class' => 'form-control', 'placeholder'=>''])}}
    </td>
    <td data-name="MachineName">
        <div class="form-group row-fluid m-auto">
            <select name="items[][MachineName]" 
                    class="form-control" 
                    id="MachineName" 
                    data-live-search="true">
                <option value=""></option>
                @foreach($machineName as $machineName)
                <option value="{{$machineName->id}}">{{$machineName->MachineName}}</option>
                @endforeach
            </select>
        </div>
    </td>
    <td data-name="MachineQty">
        {{Form::number('items[][MachineQty]', '', ['id'=>'MachineQty', 'class' => 'form-control', 'placeholder'=>''])}}
    </td>
    <td data-name="SMV">
        {{Form::number('items[][SMV]', '', ['id'=>'SMV', 'class' => 'form-control', 'placeholder'=>''])}}
    </td>
    <td data-name="del">
        <a name="del0" id="del0" class="btn btn-outline-danger row-remove"  value="del0">Delete</a>
    </td>
</tr>

在您的 Controller 中,您现在可以通过执行以下操作来循环访问每个项目:

//  ... initial setup here

foreach($request->input('items', []) as $item){
    $work_breakdown = new work_breakdown($item);
    // do other logic and then save to database
}

希望这有帮助!

关于php - 如何通过laravel将html表中的数据存储到mysql中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54044189/

相关文章:

javascript - Ajax 动态选择表单未提交值

mysql - 编辑 mysql 表名以与一列的值组合(连接)

php - 如何使用 Laravel Eloquent 在两个表之间创建子查询

laravel - 如何在 Laravel 中验证来自 GET 请求的输入

mysql - Laravel:从数据库输出

php - 检查 Memcache 中是否存在键

PHP while (list($key, ) =each($array)) 与 while (list($key) =each($array))

php - Symfony2 404 错误 : Object Not Found (ParamConverter error)

php - MySQL自增不重复

mysql - 如何在sql中以列方式获取行?