Sparen mit HABTM in CakePHP
-
05-07-2019 - |
Frage
ich mehrere Verbände in einem Rutsch bin die Schaffung und es gibt ein paar Probleme, wenn es ums Sparen geht.
Ich habe den folgenden Code:
<?php
foreach($userData as $user) {
$data = array('User' => array('id' => $user['id']), 'Site' => array('id' => $user['site_id']));
$this->User->save($data);
}
?>
Ich habe mit der Formatierung der Daten-Array auf unterschiedliche Weise experimentiert, obwohl ich immer die gleichen Probleme stoßen. Entweder werden die vorherigen Einträge erhalten bewegen, wenn ein neuer eingesetzt wird oder die aktuelle aktualisiert wird.
Ich konnte einfach die folgende verwenden, obwohl ich ein Verhalten auslösen müssen.
$this->User->SiteUser->save($data);
Edit: Auch $ this-> User-> create (); scheint nicht viel zu tun.
Lösung
Die IRC ausrechnen geholfen, was falsch war, sobald die einzigartig Schlüssel wurde auf false alles der Lage war, richtig zu speichern.
//In the user model
var $hasAndBelongsToMany = array(
'Site' => array(
'className' => 'Site',
'unique' => false
)
);
Andere Tipps
Versuchen Sie, die id
vor einem neuen save()
Zurücksetzen möglicherweise bei beiden Modellen:
$this->User->id = null;
Cake entscheidet, ob Einträge auf dem Set id
basierend zu aktualisieren oder einzufügen, und save()
setzt automatisch eine id
. Nicht sicher, warum create()
nicht Pflege für Sie diese dauert.
Auch wenn Sie HABTM Daten speichern möchten, sollten Sie saveAll()
statt save()
verwenden müssen. Siehe auch diese Frage .