只有最后收到的记录才会保存到数据库中

时间:2017-06-22 19:06:25

标签: laravel

我正在使用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

2 个答案:

答案 0 :(得分:1)

如果仔细观察一下,您会发现if (myNav.tips!= undefined) { // Your code } 方法会循环显示给定的集合,为SaveOrder$order->$key = $value设置productName - 并且下一次迭代覆盖这些值。这就是为什么,当你{Order}模型productDesc时,你所插入的只是最后一个(迭代的)值对。

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

答案 1 :(得分: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);
    }
}