Considérez le code suivant dans un DataMapper, pour enregistrer les données dans une base de données:Comment mettre à jour les données dans une base de données
/**
* 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);
}
}
Ce que je fais est que je sauve mon objet chaque fois. Lorsque vous faites un insert, ce n'est pas un problème. Parce que j'envoie une mise à jour complète remplie. Mais disons que je veux mettre à jour mon mot de passe. Et je fais une mise à jour. Il ne me laisse pas faire la mise à jour, car il est dit que certaines valeurs ne peuvent pas être 0.
Par exemple: déclaration Mysqli exécuter erreur: colonne « nom d'utilisateur » ne peut pas être nulle »
Quel est le meilleur pour soultion cela? dois-je d'abord charger l'objet entier à nouveau à partir de la base de données, puis modifiez les champs et faire la mise à jour? Ou sont utres mieux, des solutions plus communes?
Merci