Völlig neu zu Cake.CakePHP: hasOne verwandte Tabelle speichert mehrere Einträge bei Aktualisierungen
Ich habe diese Tabelle namens Content und eine andere mit dem Namen ContentMeta (über content_id bezogen). Jeder Eintrag im Content hat eine entsprechende ContentMeta.
Wenn ich neue Inhalte hinzufügen, das ist der Code, den ich einen neuen Eintrag zu ContentMeta hinzufügen bin mit:
if(!empty($this->data)) {
// Save Content
$this->Content->create();
$content = $this->Content->save($this->data);
// Save Meta
if(!empty($content)) {
$this->data['ContentMeta']['content_id'] = $this->Content->id;
$this->Content->ContentMeta->save($this->data);
$this->Session->setFlash('Content has been saved.');
$this->redirect(array('action' => 'edit', $this->Content->id));
}
}
Dies funktioniert gut, und fügen Sie einen neuen Eintrag zu Inhalt und eine zu ContentMeta.
Wenn es um die Aktualisierung der Daten geht (Bearbeitungsmodus), stoße ich auf ein kleines Problem. Der Eintrag für den Inhalt wird ohne Probleme aktualisiert, aber in der Tabelle ContentMeta wird bei jedem Update ein neuer Eintrag erstellt.
Hier ist der Code für die Aktualisierung:
$this->Content->id = $id;
// Update Content
$content = $this->Content->save($this->data);
// Update Meta
if(!empty($content)) {
//Debugger::dump(print_r($this->data,true));
$this->data['ContentMeta']['content_id'] = $this->Content->id;
$this->Content->ContentMeta->save($this->data);
$this->Session->setFlash('Content has been updated.');
$this->redirect(array('action' => 'edit', $this->Content->id));
}
Ich bin sicher, dass es einige logische Fehler in diesem Block, der dies geschehen verursacht. Kann mir jemand eine Idee geben, wo ich falsch liege?
Danke, m^e
Perfekt. Das hat den Job gemacht und saveAll half dabei, den Code zu reduzieren. Ich bin früher auf saveAll gestoßen, habe es aber vermieden, es zu benutzen, bis ich die einzelnen Schritte manuell ausprobiert habe. Danke Nik :) –
alles saveAll ist Aufruf save() ein paar Mal (gut __save()), aber es tut den Code aufräumen – dogmatic69