我的请求数据代表一系列新项目和现有项目。我试图通过这个数组来更新和创建项目。
这就是我检索数组的方法:
$userInput = $request->all();
foreach( $userInput['items'] as $key=>&$item){
稍后在代码中我更新了现有项目:
$updateItem = Item::find($item['id']);
$updateItem->number = $item['number'];
$updateItem->save();
但是$item['number']
似乎包含之前更新的旧输入,而不是我上次输入的值。
如何在Laravel中循环请求数据?
这是我运行它的整个代码(想摆脱困惑):
$userInput = $request->all();
// checking $userInput here
// I can see the new value in the array
foreach( $userInput['items'] as $key=>$item){
if($item['delete'] == 1) {
Item::where('order_id',$order->id)
->where('id',$item['id'])
->delete();
} else {
if(empty($item['id'])) {
} else {
$updateItem = Item::find($item['id']);
$updateItem->number = $item['id'];
$updateItem->save();
}
}
}
这是来自html的输入(只是为了显示我也检查了表格,数据也很好):
<input id="basicItemNumber-31" class="form-control" name="items[31][number]" placeholder="Unique number" value="31" type="text">
答案 0 :(得分:1)
您for
内某处的某个地方可能无意中更改了您的下属$item
的值,因为您通过引用传递了它&
之前使用array
变量名。)
一些人或大多数人认为这是不好的做法,因为它可能会导致意外的&#34;行为,例如。获取下面的示例代码,通过$items
<?php
$items = ['one','two','three'];
foreach ($items as &$item) {
//do nothing.
}
foreach ($items as $item) {
//do nothing again.
}
var_dump($items);
//outputs
array(3) {
[0]=>
string(3) "one"
[1]=>
string(3) "two"
[2]=>
&string(3) "two"
}
两次循环引用一次,按值循环一次。
Calendar now = Calendar.getInstance(TimeZone.getTimeZone("Asia/Singapore"));
答案 1 :(得分:0)
尝试这样的方法,因为它会使你的范围保持在本地:
$request['items']->each(function($item, $key) use ($order) {
if ($item->delete) {
Item::where('order_id',$order->id)
->where('id',$item['id'])
->delete();
} else {
if (!empty($item['id'])) {
$updateItem = Item::find($item['id']);
$updateItem->number = $item['id'];
$updateItem->save();
}
}
});