【问题标题】:how to store data in mysql from html table by laravel如何通过 laravel 将数据从 html 表存储到 mysql 中
【发布时间】:2019-01-04 18:21:17
【问题描述】:

我有一个动态可排序表,我可以在其中添加或删除行,例如 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>

有我的控制器

// 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

【问题讨论】:

  • 这仅仅意味着你试图循环的东西(可能是$ProcessName_ID)不是可以循环的东西。例如,你可能认为它是一个数组,但它实际上是一个字符串。
  • 您需要验证输入是打印一个数组还是获取第一个值
  • @Alex Howansky,是的,实际上我是新手,我不知道如何从表中获取数据。你能帮我这样做吗?

标签: php mysql laravel


【解决方案1】:

当我刚开始将数组作为表单输入时,这是一个棘手概念的经典示例。它是 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>

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

//  ... initial setup here

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

希望这会有所帮助!

【讨论】:

  • 我还假设您使用 this package 生成表单输入
  • 它正在工作,但它只迭代 4 次。仅此而已。
  • 我认为它迭代了四次,因为有四列。但是这里的列号是固定的,行号是可变的,我想在行号的基础上迭代这个循环。
  • 在我的示例中,列号不是可变的...行数实际上是可变的。您可以通过查看 chrome 中的网络选项卡并检查发布数据来查看您发送到服务器的内容。确保它是我在 JSON 中显示的格式,或者您希望能够在后端使用它
  • 一切都很好,除了它只存储前 4 行的数据。其余行值不存储。如果我使用dd($request-&gt;all()),那么它会显示 [drive.google.com/open?id=1SWiWUPCgOnnCJnqiU4NDNT6Zp2poJwEZ]
【解决方案2】:

我以一种棘手的方式解决了这个问题。如果有人知道标准方式,请告诉我。在这里,我像这样更改了我的视图页面

<table class="table table-hover table-sortable" id="tab_logic" name="DataTable">
                                <thead>
                                    <tr class="text-center">
                                        <td style="width: 2%;" class="text-white">SN</td>
                                        <td style="width: 38%;">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="d-none">
                                        <td data-name="SN" class="d-none">
                                            <div class="form-group row-fluid m-auto">
                                            <input name="items[][SN]" type="text" class="form-control d-none" id="forIncrementalRow">
                                            </div>
                                        </td>
                                        <td data-name="ProcessName">
                                            {{Form::text('ProcessName0', '', ['id'=>'ProcessName', 'class' => 'form-control', 'placeholder'=>''])}}
                                        </td>
                                        <td data-name="MachineName">
                                                <select name="MachineName0" class="form-control row-fluid m-auto" id="MachineName" data-live-search="true">
                                                    <option value=""></option>
                                                    @foreach($machineName as $machineName)
                                                        <option value="{{$machineName->id}}">{{$machineName->MachineName}}</option>
                                                    @endforeach
                                                </select>
                                        </td>
                                        <td data-name="MachineQty">
                                        {{Form::number('MachineQty0', '', ['id'=>'MachineQty', 'class' => 'form-control', 'placeholder'=>''])}}
                                        </td>
                                        <td data-name="SMV">
                                        {{Form::number('SMV0', '', ['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="6" 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="6" style="text-align: left;">
                                            {{Form::submit('Save', ['class'=>'btn btn-lg btn-outline-primary btn-block', 'name'=>'ProductInsert'])}}
                                        </td>
                                    </tr>
                                </tfoot>
                            </table>

还有控制器

$maxValue = product_details::max('id');
            $i=0;
            $j=0;
            foreach($request->input('items', []) as $item){
            
            $j++;
            // Create Post
            $work_breakdown = new work_breakdown($item);
            $work_breakdown->ProductID = $maxValue;
            $work_breakdown->SN = $j;
            $work_breakdown->ProcessName = $request->input("ProcessName{$j}");
            $work_breakdown->MachineID = $request->input("MachineName{$j}");
            $work_breakdown->MachineQty = $request["MachineQty{$j}"];
            $work_breakdown->SMV = $request["SMV{$j}"];
            $work_breakdown->user_id = auth()->user()->id;
            $work_breakdown->save(); 
            }

            $userID = auth()->user()->id;

            //to delete unexpected row
            $maxValue2 = work_breakdown::where('user_id', $userID)->max('id');
            DB::delete('delete from work_breakdown where id = ?',[$maxValue2]);

这个循环总是保存一个空值的额外行,所以我在循环后删除它

【讨论】:

    猜你喜欢
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2011-02-08
    • 2013-07-03
    • 1970-01-01
    • 2018-05-10
    相关资源
    最近更新 更多