public function save($model, $id, $data)
{
$dsql = $this->getDsqlForSave($model);
foreach ($data as $key => $value) {
$field = $model->getElement($key);
$fieldTable = $field->table();
// I set the value only for the current model table.
// The other values'll be save by field sql relation
if ($model->isDirty($key) && $field && (is_null($fieldTable) || $fieldTable === $model->table_alias)) {
$dsql->set($field->actual() ?: $key, $field->sanitize($value));
}
}
if (empty($dsql->args['set'])) {
return $id;
// is it correct?
}
$this->app->db->beginTransaction();
if (is_null($id)) {
$id = $dsql->insert();
} else {
$dsql->where($model->id_field, $id);
$dsql->update();
// uniform atk's bug
$id = '' . ($data[$model->id_field] ?: $id);
if (isset($data[$model->id_field])) {
$model->data[$model->id_field] = $id;
}
}
//$id = '' . $id;
$dsql->stmt = null;
$model->tryLoad($id);
if ($model->loaded()) {
$this->app->db->commit();
} else {
$this->app->db->rollback();
throw $model->exception('Record with specified id was not found');
}
return $id;
}