Wie kann ich Cake dazu bringen, REPLACE INTO anstelle von INSERT INTO zu verwenden? Ich habe eine Aktion, die Daten in der Datenbank speichert, aber ich möchte keine doppelten Einträge haben. Die Primärschlüssel (id) sind eindeutig, wenn der Wert bereits existiert Ich möchte nicht, dass er als neue Zeile eingegeben wird.CakePHP: Vorhandene doppelte Daten überschreiben
Die Daten, die gespeichert werden, werden auch dynamisch generiert, daher wäre das Beenden mit einem Fehler nicht geeignet.
EDIT Initally die Daten, die ich bin Speichern ist in einem einzigen großen Array
$data = Array([0] => 'value1', [1] => 'value2', [2] => 'value3') etc
Ich versuche, durch diese Anordnung eine Schleife, um jeden Wert als neuer Datensatz gespeichert
foreach ($data as $value) {
$save_data['Model'] = array('field' => $value);
}
Classregistry::init('Model')->saveAll($save_data);
Ich verwende Classregistry, weil ich die Daten in einem anderen Modell speichern. Zur Zeit schlägt dieser Code fehl, wenn versucht wird, einen doppelten Datensatz einzufügen, weil 'Feld' ein eindeutiger Index ist. Vor der Verwendung von CakePHP habe ich einfach die REPLACE INTO-Syntax ohne Probleme verwendet. Ich würde gerne etwas ähnliches in Cake erreichen.
Die einzige Problemumgehung, die ich im Moment habe, ist die Eingabe von Duplikaten, die nur eindeutige Zeilen anzeigen, indem sie gruppiert werden.
Es ist erwähnenswert, es gibt andere Wege, dies zu tun, wie die Einstellung der 'id' param auf dem Modell vor speichern. – jeremyharris
Ich bin mir nicht sicher, ob ich klar war. Ich habe eine große Datenmenge unbekannter Größe. Ich möchte das Array loopen und jeden Eintrag als neuen Datensatz speichern, aber Duplikate vermeiden. – Robert
Die gleiche Idee gilt. Woher weißt du, ob es einzigartig ist? Hast du die ID in der großen Reihe? Wenn ja, benutze das. Andernfalls müssen Sie nach einem anderen eindeutigen Feld suchen. Möglicherweise müssen Sie Ihre Frage neu formulieren und ein Snippet möglicher Array-Werte einfügen. – jeremyharris