CakePHP hasAndBelogsToMany mit save () vs. SaveAll ()
-
02-07-2019 - |
Frage
Ich bin mit einer sehr intrinsischen Datenbank mit einer CakePHP Anwendung und bisher meine Multi-Modelle Ansichten und Controller arbeiten gut. Ich habe eine singuläre Tabelle (Entity
), die es auf mehreren anderen Tabellen als Fremdschlüssel id
entity_id
haben ist
Einige Tische sind 12.59 Beziehungen (wie ein Company
ist ein Entity
) und einige sind ein bis viele (Entity
können mehrere Addresses
haben) und so weiter.
Ich werde nicht / kann nicht das Datenbankmodell ändern , so ist dies die Struktur.
Ich habe mit saveAll()
Daten auf diesen Tabellen mit Eingabenamen speichern wie:
Entity.type='x' (hidden inside the view)
Company.name
Address.0.street
Address.0.city
Address.1.street
Address.1.city
... and so on ...
und meine speichern alle ist die ganze harte Arbeit tun, BEGIN TRANSACTION
alle INSERT
s und eine abschließende COMMIT
...
Aber jetzt habe ich eine EntityCategory
geschaffen, die eine n n Beziehung ist und erstellt die volle HABTM
Beziehung innerhalb des Modells.
Es funktioniert, wenn ich es save()
aber nur die HABTM
Beziehung, und es spart Everthing, wenn ich saveAll()
verwenden (wie bisher) mit Ausnahme der HABTM
Beziehung.
Bin ich etwas fehlt? Wie ich diese Arbeit richtig machen? Ich verwende den folgenden Code heute:
if (!empty($this->data)) {
$this->Entity->saveAll($this->data);
$this->Entity->save($this->data);
}
Die saveAll()
speichert alle Daten in mehreren Tabellen, speichert die ID in Entity->id
und die save()
speichert die HABTM
Beziehungen, aber ich bin nicht sicher, ob es richtig ist, oder wenn es mir Probleme mit sich bringen kann, wenn ich eine gewisse Struktur / Modell ändern.
Ist dies der beste Weg, es zu benutzen? Gibt es eine richtig Art und Weise, dass die Beziehungen innerhalb CakePHP zu retten? Was ist Ihre Erfahrung / Wissen kann mir sagen?
Lösung
Diese festgelegt ist, wenn Sie die nächtlichen .
Seien Sie vorsichtig, etwas anderes könnte brechen.
Andere Tipps
Das Problem mit SaveAll () und HABTM Verbänden ist eine bekannte CakePHP Ausgabe und hat nicht als 1.2 RC2 behoben.
Als fas als beste pratices für das Speichern von verwandten Modelldaten geht, nach dem CakePHP Kochbuch :
"Wenn mit dem dazugehörigen Modellen arbeiten, ist es wichtig, dass die Rettung von Modelldaten zu realisieren, sollten immer mit dem entsprechenden CakePHP Modell durchgeführt werden. Wenn Sie einen neuen Beitrag und die dazugehörigen Kommentare zu speichern, dann würden Sie beide Post und Comment-Modelle verwenden während der Operation retten. "
jedoch mit SaveAll () und save () sollte funktionieren, und meiner Meinung nach ist eine flexiblere / generische Lösung.