2017-04-06 2 views
0

In meiner Anwendung habe ich ein Modell, das einzelne Werbebuchungen auf einem Bestellformular erfasst. Es kann eine unendliche Anzahl von ihnen geben. Sie sind durch einen Fremdschlüssel (msr_id) an ein "Eltern" -Modell gebunden.CakePHP: Daten in einer foreach-Schleife speichern

Manchmal möchte der Benutzer das Bestellformular kopieren, damit die Artikel nachbestellt werden können. Ich habe Probleme beim Kopieren der einzelnen Werbebuchungen in einen neuen Datensatz. Hier ist der Code in meinem Controller, der die Positionen ruft:

/*Get the MSR line items and build an array out of them. The 
line items are tied to the main record by $orig['Msr']['id']*/ 
$this->loadModel('MsrLineItem'); 
$lines = $this->MsrLineItem->find('all', array('conditions'=>array('msr_id'=>$orig['Msr']['id'], 'MsrLineItem.deleted_record'=>0))); 

Wenn ich $ Linien debuggen, es zeigt die beiden Positionen, die auf dem Bestellformular existiere ich zu kopieren bin versucht. Hier ist der Code in dem gleichen Controller, den ich versuche zu verwenden, um die Positionsdaten in den neuen Datensatz zu kopieren:

//Save the non-line item data first 
if($newmsr = $this->Msr->save($new)) { 
    //Set the line item ID to the new record ID (from $newmsr) 
    $this->MsrLineItem->set('msr_id', $newmsr['Msr']['id']); 
    //Loop through the line items, saving each one to the new record 
    foreach($lines as $line) { 
    $newli['MsrLineItem']['quantity'] = $line['MsrLineItem']['quantity']; 
    $newli['MsrLineItem']['unit_of_meas'] = $line['MsrLineItem']['unit_of_meas']; 
    $newli['MsrLineItem']['description'] = $line['MsrLineItem']['description']; 
    $newli['MsrLineItem']['part_no'] = $line['MsrLineItem']['part_no']; 
    $newli['MsrLineItem']['unit_price'] = $line['MsrLineItem']['unit_price']; 
    $this->MsrLineItem->save($newli, 'msr_id'); 
    } 
    $this->Session->setFlash(__('The MSR has been copied successfully.')); 
    $this->redirect(array('action' => 'edit', $newmsr['Msr']['id'])); 

Mein Problem ist, dass ich nur die letzte Position in der Schleife zu erfassen. Alle, die davor kommen, werden ignoriert. Wie kann ich alle Werbebuchungen erfassen?

Antwort

0

Ich fand es heraus. Ich habe $ this-> MsrLineItem- nennen> create() zu Beginn jeder Iteration der Schleife:

foreach($lines as $line) { 
    $this->MsrLineItem->create(); 
    //Copy the line items 
} 

hinzugefügt, die Linie auf der Schleife und es funktioniert jetzt.

Verwandte Themen