Laravel 5.4:如何遍历请求数组?

时间:2017-02-16 11:08:43

标签: php arrays laravel laravel-5 laravel-5.4

我的请求数据代表一系列新项目和现有项目。我试图通过这个数组来更新和创建项目。

这就是我检索数组的方法:

$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">

2 个答案:

答案 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();
        }
    }
});