如何将 blade 中的数组值存储到 Laravel 中的数据库
how to store an array value from blade to database in Laravel
正在提交动态表单但无法将值存储到数据库中。我是初学者,卡了2.3天,还是解决不了问题
the request value is like
{"_token":"PTGmyf3UZrD1TgKDJcREcKia9VFRLYaP5kNaAkAU","id":["28","31"],"name":["Fogg","zack"],"rate":["70","5000"],"quantity":["1","1"],"submit":"Submit"}
<form name="" id="form" action="{{ url('/store_order_item') }}" method="POST">
@csrf
<table class="table table-bordered" id="dynamic_field">
<thead>
<tr>
<th>Product Id</th>
<th>Name</th>
<th>Rate</th>
<th>Quantity</th>
<th>Amount</th>
<th>Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<h6>Grand Total: <span id= "grandtotal"></span> </h6>
<input type="button" name="" id="" class="btn btn-sm btn-danger" value="Cancel">
<input type="submit" name="submit" id="submit" class="btn btn-sm btn-secondary" value="Submit"/>
</form>
</div>
<script type="text/javascript">
var i = 1;
$(document).ready(function(){
var button_id1 ;
$('#button').click(function(){
let namesearch = $('#search').val();
let idsearch = $('#idsearch').val();
if ((namesearch == '')&&(idsearch == '')){
return false;
}
$.ajax({
type:"GET",
url: "/pos_search_ajax",
data: { name: namesearch, id: idsearch },
success: function(response) {
$('#dynamic_field').append('<tr id="row_'+i+'"><td><input id="id_'+i+'" type="text" name="id[]" value="'+response[0].id+'" readonly></td><td><input id="name_'+i+'" name="name[]" type="text" value="'+response[0].name+'" readonly></td><td> <input id="rate_'+i+'" name="rate[]" type="text" value="'+response[0].price+'" readonly></td><td><input id="quantity_'+i+'" onchange="change('+i+')" name="quantity[]" type="number" min=1 value="1"></td><td class="total" id="total_'+i+'" name="total[]">'+response[0].price+'</td><td> <button type="button" onclick="remove_tr('+i+')" class="btn btn-danger btn-sm">Delete</button></td></tr>');
total();
i++;
}
});
# this is the Controller #
public function store(Request $request)
{
foreach($request->all() as $itm)
{
$items = New OrderItem();
$items->product_id = $request->id;
$items->name = $request->name;
$items->save();
}
}
如果您的 request
总是这样格式化,那么使用 foreach($request->all() as $itm)
只会 return 您发送的内容,id
的值将是 ["28","31"]
等等。所以你可以尝试这样的事情:
$data = $request->all();
for ($i=0; $i < count($data['id']); $i++) {
$item = new OrderItem();
$item->product_id = $data['id'][$i];
$item->name = $data['name'][$i];
$item->save();
}
该代码将遍历 id
,并且产品名称必须与 ID 的顺序相同。
同名的多个请求参数需要在其名称属性上添加额外的数组符号([]
),而您的做法是正确的,例如<input name="name[]" ...
。
这使得参数是数组。 (不是单个值)
所以当你访问参数时,你需要使用索引号访问 1 个深度(以获得第 n 个项目)。
要访问所有项目,您需要循环该参数。
而且参数不是只有一个(id
, name
, rate
, quantity
),需要一个参数作为循环的基础
basis 参数可以是任何东西,但通常首选标识符。 (例如,id)
您自己编写的代码类似于@TheArka 的回答。
但建议你知道这是怎么回事,为什么会这样。
正在提交动态表单但无法将值存储到数据库中。我是初学者,卡了2.3天,还是解决不了问题
the request value is like {"_token":"PTGmyf3UZrD1TgKDJcREcKia9VFRLYaP5kNaAkAU","id":["28","31"],"name":["Fogg","zack"],"rate":["70","5000"],"quantity":["1","1"],"submit":"Submit"}
<form name="" id="form" action="{{ url('/store_order_item') }}" method="POST">
@csrf
<table class="table table-bordered" id="dynamic_field">
<thead>
<tr>
<th>Product Id</th>
<th>Name</th>
<th>Rate</th>
<th>Quantity</th>
<th>Amount</th>
<th>Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<h6>Grand Total: <span id= "grandtotal"></span> </h6>
<input type="button" name="" id="" class="btn btn-sm btn-danger" value="Cancel">
<input type="submit" name="submit" id="submit" class="btn btn-sm btn-secondary" value="Submit"/>
</form>
</div>
<script type="text/javascript">
var i = 1;
$(document).ready(function(){
var button_id1 ;
$('#button').click(function(){
let namesearch = $('#search').val();
let idsearch = $('#idsearch').val();
if ((namesearch == '')&&(idsearch == '')){
return false;
}
$.ajax({
type:"GET",
url: "/pos_search_ajax",
data: { name: namesearch, id: idsearch },
success: function(response) {
$('#dynamic_field').append('<tr id="row_'+i+'"><td><input id="id_'+i+'" type="text" name="id[]" value="'+response[0].id+'" readonly></td><td><input id="name_'+i+'" name="name[]" type="text" value="'+response[0].name+'" readonly></td><td> <input id="rate_'+i+'" name="rate[]" type="text" value="'+response[0].price+'" readonly></td><td><input id="quantity_'+i+'" onchange="change('+i+')" name="quantity[]" type="number" min=1 value="1"></td><td class="total" id="total_'+i+'" name="total[]">'+response[0].price+'</td><td> <button type="button" onclick="remove_tr('+i+')" class="btn btn-danger btn-sm">Delete</button></td></tr>');
total();
i++;
}
});
# this is the Controller #
public function store(Request $request)
{
foreach($request->all() as $itm)
{
$items = New OrderItem();
$items->product_id = $request->id;
$items->name = $request->name;
$items->save();
}
}
如果您的 request
总是这样格式化,那么使用 foreach($request->all() as $itm)
只会 return 您发送的内容,id
的值将是 ["28","31"]
等等。所以你可以尝试这样的事情:
$data = $request->all();
for ($i=0; $i < count($data['id']); $i++) {
$item = new OrderItem();
$item->product_id = $data['id'][$i];
$item->name = $data['name'][$i];
$item->save();
}
该代码将遍历 id
,并且产品名称必须与 ID 的顺序相同。
同名的多个请求参数需要在其名称属性上添加额外的数组符号([]
),而您的做法是正确的,例如<input name="name[]" ...
。
这使得参数是数组。 (不是单个值)
所以当你访问参数时,你需要使用索引号访问 1 个深度(以获得第 n 个项目)。
要访问所有项目,您需要循环该参数。
而且参数不是只有一个(id
, name
, rate
, quantity
),需要一个参数作为循环的基础
basis 参数可以是任何东西,但通常首选标识符。 (例如,id)
您自己编写的代码类似于@TheArka 的回答。 但建议你知道这是怎么回事,为什么会这样。