2013-12-12 4 views
5

Ich bin in eine Situation gekommen, in der ich Objekte mit ihren verwandten Objekten in Laravel 4 im Stapel speichern muss. Im Wesentlichen mache ich eine Masseneinfügung von Objekten, wo jedes Objekt kann habe viele Tags (Viele-zu-Viele-Beziehung).Stapel Einfügen von Objekten mit Beziehungen in Laravel-4

Hier ist ein Beispielcode, der ToDo Kommentare bemerken:

[...] 

$batchData = array(); 
$rowCount = 0; 
foreach ($dataArray as $key => $row) { 

     [...] 

     // parsing row from CSV 
     $obj = array(); 
     foreach ($row as $attribute => $value) { 
      $obj['template_id'] = $templateId; 
      $obj['batch_id'] = $batchId; 
      $obj['user_id']  = $confideUserId; 
      $obj['created_at'] = new \DateTime; 
      $obj['updated_at'] = new \DateTime; 
      // Attach Tags if any exist 
      if ($attribute === 'tags') { 
       if (!is_null($value) || !is_empty($value)) { 
        $tags = explode(":", $value); 
        // TODO: Get tag ID for each tag and add to $obj['tags'] array 
       } 
      }    
     } 

     // add object to array 
     $batchData[$rowCount] = $obj; 
     ++$rowCount; 

     if ($rowCount == \Config::get('app.maxCSV')) { 
      try { 
       // TODO: Batch Insert With Related tags?? 
       $obj_model_name::insert($batchData); 
      } catch (Exception $e) { 
       return false; 
      } 
      $rowCount = 0; 
      $batchData = array(); 

     } 
    } 

    [...] 

ich jedes Objekt one-by-one einsetzen könnte mit ihren Beziehungen, aber das Problem ist, dass wir diese Objekte über CSV einfügen Substanz-, wo Wir können Hunderte bis Hunderttausende von Objekten haben.

Hat jemand irgendwelche Tipps?

FYI die Datenbank MSSQL verwendet wird, ist 2012

Cheers,

Antwort

1

Nach einem Blick in diese weiter, kam ich zu dem Schluss, dass es am besten wäre, meine Logik erneut Faktor. Ich speichere nun jedes Objekt einzeln, bevor ich die Tags diesem Objekt zuweise und für alle Objekte wiederhole.

Dies ist möglicherweise nicht effizient, wenn es viele Objekte gibt, aber ab sofort ist das kein vorhersehbares Problem.