2017-06-22 7 views
0

Ich verwende Angular2 für mein Frontend und Laravel für mein Backend. Ich versuche, ein Array zu analysieren und alles in verschiedenen Zeilen zu speichern, aber derzeit wird nur der letzte empfangene Datensatz in der Datenbank gespeichert.Nur der letzte empfangene Datensatz wird in der Datenbank gespeichert

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 des Arrays

enter image description here

Antwort

0

Dank @lesssugar ich es herausgefunden, obwohl ich Bedenken es auf diese Weise zu tun habe, da es

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

Ja ineffizient scheint, es ineffizient ist. Ihr Bulk-Insert sollte * außerhalb * der 2 Loops liegen. In den Schleifen sollten Sie nur das Einfügedatenarray erstellen und nicht die Datenbankabfrage durchführen. – lesssugar

+0

@lesssugar Wenn ich es außerhalb der ersten foreach verschiebe, habe ich das gleiche Problem wie vorher, wo es nur den letzten Datensatz speichert – ghan

1

Wenn Sie genauer hinsehen, werden Sie Ihre SaveOrder Methode Schleifen durch die gegebene Sammlung bemerken, setzt der $order->$key = $value für productName und productDesc - und in der nächsten ite Ration überschreibt diese Werte. Wenn Sie das Order-Modell save() eingeben, wird nur das letzte (iterierte) Wertepaar eingefügt.

Sie sollten ein Array von Arrays erstellen, das alle einzufügenden "Zeilen" enthält, und dann eine bulk insert ausführen.

Verwandte Themen