Ответы Чандреса Махешвари - верный вариант, но рассмотрите это как альтернативу.
Я не знаком с используемой вами платформой, но вы не можете самостоятельно построить запрос или хотя бы выбрать поля, которые хотите обновить?
Я бы сделал что-то вроде:
public function save($model) {
if (!$model instanceof Model_User) {
throw new InvalidArgumentException('Model is not of correct type');
}
$data = array();
if($model->getUserName())
$data['username'] = $model->getUserName();
if($model->getFirstName())
$data['firstname'] = $model->getFirstName();
// .... and so on ...
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);
}
}
Конечно, вы должны проверить, является ли поле ложным / NULL, потому что оно не было изменено или потому что пользователь действительно хочет, чтобы оно было пустым (т.е. удалено), или убедитесь, что все поля не равны NULL, когда вы вставляете.