2017-06-22 61 views
0

我使用Angular2作为我的前端,laravel作为我的后端。我试图解析一个数组并将其全部存储到不同的行中,但是当前只有最后收到的记录被保存到数据库中。只有最后收到的记录被保存到数据库

public function SaveOrder(Request $request) { 
    $input = $request->all(); 
    $order = new Order; 

    foreach ($input as $arr) { 
     foreach ($arr as $key => $value) { 
     if (array_key_exists($key, $arr) && !empty($value)) { 
       $order->$key = $value; 
     } 
     } 
    } 
    $order->save(); 
} 

enter image description here

$input = $request->all(); 
foreach ($input as $arr) { 
    var_dump($arr); 
    foreach ($arr as $key => $value) { 
     if (array_key_exists($key, $arr) && !empty($value)) { 
     } 
    } 
} 

的var_dump阵列的

enter image description here

回答

0

感谢@lesssugar我想通了,虽然我有做这种方式的第二个想法,因为它似乎低效

public function saveOrder(Request $request) { 

    $input = $request->all(); 
    foreach ($input as $arr) { 
     foreach ($arr as $key => $value) { 
      if (array_key_exists($key, $arr) && !empty($value)) { 
       $data = array($arr); 
      } 
     } 
     DB::table('test')->insert($data); 
    } 
} 
+0

是的,这是低效的。您的批量插入应该在2个循环的*外*。在循环中,您只应构建插入数据数组,而不执行数据库查询。 – lesssugar

+0

@lesssugar如果我把它移到第一个foreach之外,我有和以前一样的问题,它只保存最后一条记录 – ghan

1

如果你仔细看看,你会发现你的SaveOrder方法遍历给定的收集,设置$order->$key = $valueproductNameproductDesc - 并在下一个迭代配给将覆盖这些值。这就是为什么当你订购模型save()时,你所插入的只是最后一个(迭代的)值对。

你应该做的是建立一个数组阵列,包含所有要插入的“行”,然后执行一个bulk insert

相关问题