/** * Функция удаляет резервные копии, превысившие лимит * * @param int $dicval_id * @return bool */ private function delete_backups($dicval_id = 0) { /** * Находим запись словаря для удаления ее бэкапов * Запись должна быть оригиналом, т.е. иметь version_of = NULL */ $element = DicVal::where('id', $dicval_id)->with('dic', 'metas', 'allfields', 'seos', 'versions')->first(); if (!isset($element) || !is_object($element) || $element->version_of != NULL) { return false; } #Helper::tad($element); $dic = $element->dic; $versions = Config::get('dic/' . $dic->slug . '.versions'); $element_versions = $element->versions; $result = true; if (count($element_versions) > 0 && count($element_versions) >= $versions) { /** * Вычисляем ID записей, подлежащих удалению */ $for_delete = $element_versions->lists('id'); krsort($for_delete); $for_delete = array_slice($for_delete, 0, count($element_versions) - $versions); #Helper::dd($for_delete); if (count($for_delete)) { $result = false; /** * Открываем транзакцию */ DB::transaction(function () use($element, $for_delete, $result) { /** * Удаляем старые резервные копии и их доп. поля, META и SEO-данные */ DicFieldVal::whereIn('dicval_id', $for_delete)->delete(); DicValMeta::whereIn('dicval_id', $for_delete)->delete(); if (Allow::module('seo')) { Seo::where('module', 'DicVal')->whereIn('unit_id', $for_delete)->delete(); } $deleted = DicVal::where('version_of', $element->id)->whereIn('id', $for_delete)->delete(); #Helper::d($deleted); #Helper::dd($for_delete); if ($deleted) { $result = true; } }); } } return $result; }