2017-06-22 58 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

相關問題