add delete function into model
Этот коммит содержится в:
родитель
ef5ef19daa
Коммит
3e3cfb4cf0
@ -254,7 +254,7 @@ class Model
|
||||
}
|
||||
|
||||
/**
|
||||
* Save models
|
||||
* Save models.
|
||||
*
|
||||
* @param Model[] $models
|
||||
*
|
||||
@ -303,7 +303,7 @@ class Model
|
||||
}
|
||||
}
|
||||
$pairs_string = 'SET '.implode(', ', $pairs);
|
||||
$query = $db->prepare($operation." `{$table_map['name']}` $pairs_string $suffix;");
|
||||
$query = $db->prepare("$operation `{$table_map['name']}` $pairs_string $suffix;");
|
||||
|
||||
$bind_params = [];
|
||||
$num = 0;
|
||||
@ -335,6 +335,62 @@ class Model
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove model data from a table and unset them.
|
||||
*
|
||||
* @param Model[] $models
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function delete(array &$models): bool
|
||||
{
|
||||
if (count($models)) {
|
||||
if ($models[0] instanceof Model) {
|
||||
if ('db' !== $models[0]->getModelType()) {
|
||||
throw new Exception('Item 0 is not Model of a db type');
|
||||
}
|
||||
|
||||
$db = $models[0]->app->db;
|
||||
$db->beginTransaction();
|
||||
|
||||
foreach ($models as $number => $model) {
|
||||
if ($model instanceof Model) {
|
||||
if ('db' !== $model->getModelType()) {
|
||||
$db->rollBack();
|
||||
throw new Exception("Item $number is not Model of a db type");
|
||||
}
|
||||
$table_map = $model->getInternalTableMap();
|
||||
|
||||
$id = null;
|
||||
(function () use (&$id, $table_map) {
|
||||
$id = $this->{$table_map['id']};
|
||||
})->call($model);
|
||||
|
||||
$query = $db->prepare("DELETE FROM `{$table_map['name']}` WHERE `{$table_map['fields'][$table_map['id']]}` = :param_{$table_map['id']}");
|
||||
|
||||
$query->bindParam(':param_'.$table_map['id'], $id);
|
||||
if (!$query->execute()) {
|
||||
$db->rollBack();
|
||||
throw new Exception("Item $number not deleted");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$db->commit();
|
||||
|
||||
foreach ($models as $key => $model) {
|
||||
unset($models[$key]);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user