如何从 laravel 8 中的表单插入多行
How to insert multiple row from form in laravel 8
我有一个 table 的形式类似于:
products
comments
product 1
comment 1
product 2
comment 2
- 只有评论字段是 writable,用户可以在其中输入有关每个产品的评论
- 产品显示在数据库中(不在输入元素中)
我想,当用户点击保存按钮时,每一行都按原样添加到数据库中(成对 [产品 i,评论 i])
我试过了
foreach ($request->products as $key=>$product) {
$saveData = [
'product' => $request->product[$key],
'comment' => $request->comment[$key],
];
DB::table('prod_com')->insert($saveData);
}
在控制器中并且
<form id="regForm" method="post" >
@csrf
<table>
<tr>
<th>Product</th>
<th>Comment</th>
</tr>
@foreach($prdcts as $products)
<tr>
<td>{{$products['product']}}</td>
<td>
<input type="text" class="form-control" name="comment[]" >
</td>
</tr>
</table>
在表格中,但数据未添加到数据库中,或者我收到 405 错误方法不允许..
非常感谢任何帮助!
编辑:
完整 html 表格
<form id="regForm" action="{{route('saved')}}" method="post" >
@csrf
<table class="table table-responsive table-condebsed table-hover">
<thead>
<tr>
<th scop="col"> Product </th>
<th class="col-md-6" scop="col"> Comment </th>
</tr>
</thead>
<tbody>
@foreach($prdcts as $products)
<tr>
<td>{{ $products['product'] }}</td>
<td>
<input type="text" class="form-control" name="comment[]" >
</td>
</tr>
@endforeach
</tbody>
</table>
<br>
<button type="submit" class="btn btn-sm btn-success">save</button>
</form>
&路线:
Route::post('/saved', [App\Http\Controllers\ProdComController::class, 'submitData'])->name('saved');
您可以在将数据保存到数据库时使用 for 循环
for ($i = 0; $i < count($request->comment); $i++) {
$comment = Commet::create([
'comment' => $request->comment[$i],
]);
}
更改 html 代码如下
@foreach($prdcts as $key=>$products)
<tr>
<td>{{$products['product']}}</td>
<td>
<input type="hidden" class="form-control" name="product[{{ $key}}][product]" value="{{$products['id']}}">
<input type="text" class="form-control" name="product[{{ $key}}][comment]" >
</td>
</tr>
@endforeach
然后在控制器中
DB::table('prod_com')->insert($request->product);
如果出现任何错误,请尝试像下面这样打印 $request
dd($request->all());
因此您可以在 request.If 问题中检查数据格式,然后在评论中告诉我
我有一个 table 的形式类似于:
products | comments |
---|---|
product 1 | comment 1 |
product 2 | comment 2 |
- 只有评论字段是 writable,用户可以在其中输入有关每个产品的评论
- 产品显示在数据库中(不在输入元素中)
我想,当用户点击保存按钮时,每一行都按原样添加到数据库中(成对 [产品 i,评论 i])
我试过了
foreach ($request->products as $key=>$product) {
$saveData = [
'product' => $request->product[$key],
'comment' => $request->comment[$key],
];
DB::table('prod_com')->insert($saveData);
}
在控制器中并且
<form id="regForm" method="post" >
@csrf
<table>
<tr>
<th>Product</th>
<th>Comment</th>
</tr>
@foreach($prdcts as $products)
<tr>
<td>{{$products['product']}}</td>
<td>
<input type="text" class="form-control" name="comment[]" >
</td>
</tr>
</table>
在表格中,但数据未添加到数据库中,或者我收到 405 错误方法不允许..
非常感谢任何帮助!
编辑: 完整 html 表格
<form id="regForm" action="{{route('saved')}}" method="post" >
@csrf
<table class="table table-responsive table-condebsed table-hover">
<thead>
<tr>
<th scop="col"> Product </th>
<th class="col-md-6" scop="col"> Comment </th>
</tr>
</thead>
<tbody>
@foreach($prdcts as $products)
<tr>
<td>{{ $products['product'] }}</td>
<td>
<input type="text" class="form-control" name="comment[]" >
</td>
</tr>
@endforeach
</tbody>
</table>
<br>
<button type="submit" class="btn btn-sm btn-success">save</button>
</form>
&路线:
Route::post('/saved', [App\Http\Controllers\ProdComController::class, 'submitData'])->name('saved');
您可以在将数据保存到数据库时使用 for 循环
for ($i = 0; $i < count($request->comment); $i++) {
$comment = Commet::create([
'comment' => $request->comment[$i],
]);
}
更改 html 代码如下
@foreach($prdcts as $key=>$products)
<tr>
<td>{{$products['product']}}</td>
<td>
<input type="hidden" class="form-control" name="product[{{ $key}}][product]" value="{{$products['id']}}">
<input type="text" class="form-control" name="product[{{ $key}}][comment]" >
</td>
</tr>
@endforeach
然后在控制器中
DB::table('prod_com')->insert($request->product);
如果出现任何错误,请尝试像下面这样打印 $request
dd($request->all());
因此您可以在 request.If 问题中检查数据格式,然后在评论中告诉我