Beispiel #1
0
 public function remove_field($key, $lang = NULL)
 {
     if (!$this->id) {
         return false;
     }
     $dicval = DicFieldVal::firstOrNew(array('dicval_id' => $this->id, 'language' => $lang, 'key' => $key));
     $dicval->delete();
     unset($this->{$key});
     return $dicval;
 }
 /**
  * Функция удаляет резервные копии, превысившие лимит
  *
  * @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;
 }