Betrachten Sie den folgenden Code in einem DataMapper, Daten in eine Datenbank zu speichern:So aktualisieren Daten in einer Datenbank
/**
* Save data into the database
* @param Site_Model_User $model
* @throws InvalidArgumentException
*/
public function save($model) {
if (!$model instanceof Model_User) {
throw new InvalidArgumentException('Model is not of correct type');
}
$data = array();
$data['username'] = $model->getUserName();
$data['firstname'] = $model->getFirstName();
$data['lastname'] = $model->getLastName();
$data['email'] = $model->getEmail();
$data['password'] = $model->getPassword();
$data['role'] = $model->getRole();
$data['pic'] = $model->getImage();
if ($model->getId() < 0) {
// nieuw object, doe insert
$id = $this->getDao()->insert($data);
$model->setId($id);
} else {
// bestaand object, doe update
$where = $this->getDao()->getAdapter()->quoteInto('id = ?', $model->getId());
$this->getDao()->update($data, $where);
}
}
Was ich tue, ist, dass ich mein Objekt jedes Mal zu speichern. Beim Einfügen ist das kein Problem. Weil ich ein komplettes gefülltes Update sende. Aber sagen wir, ich möchte mein Passwort aktualisieren. Und ich mache ein Update. Es lässt mich das Update nicht, weil es sagt, dass bestimmte Werte nicht 0
Zum Beispiel sein kann: Mysqli Anweisung Fehler ausführen: Spalte ‚username‘ nicht null sein kann“
Was für die beste soultion ist das? Soll ich noch einmal das ganze Objekt lädt zuerst aus der Datenbank, dann die Felder ändern und tut dann das Update? Oder sind ther andere bessere, gemeinsame Lösungen?
Dank