Восстановить удаленное поле

11

У меня есть тип контента с 4 полями, каждое из которых является ссылкой на термин. Есть 100 узлов, каждый из которых назначен 4 термины ссылки. Я случайно удалил одно из этих полей из admin> Structure> content-types> mycontent-type ..., в результате чего все 100 узлов потеряли термин ссылка, содержащаяся в этом потерянном поле.

После установки модуля Database Admin я мог видеть, что база данных для моего удаленного поля все еще присутствует, она была переименована во что-то вроде «field_deleted_field_74»

  1. Используя mysql, я смог переименовать эту базу данных обратно в «field_data_field_originalname», то есть используя исходное имя машины для удаленного поля.
  2. Кроме того, мне удалось изменить значение удаленного столбца внутри этой базы данных с «1» на «0».

Я проделал вышеупомянутое с другой базой данных «призраков», которая, как я обнаружил, называлась чем-то вроде «field_revision_field_74» ...

Теперь моя проблема заключается в том, что мое переименованное поле не отображается как ранее существовавшее поле в моем отображении полей управления типом контента, а также в списке администраторов> отчетов> полей. Когда я запускаю 'drush field-info fields', он также отсутствует.

Как мне вернуть его обратно? Я предполагаю, что есть другая база данных, которая ссылается на нее, и которую мне нужно отредактировать.

Спасибо!

Iain Maitland
источник
Есть ли у вас какие-либо резервные копии всей базы данных перед удалением полей?
Олли
К сожалению нет. Однако я решил проблему.
Iain Maitland

Ответы:

14

Хороший вопрос, и удивительно, что нет более простого способа откатить удаленное поле, учитывая, что данные все еще доступны.

Предполагая, что у вас есть:

  1. Переименованы таблицы field_deleted_ * обратно в field_data_field_myfield и field_revision_field_myfield (последние также важны)
  2. Обновлен флаг «удален» с 1 до 0 в соответствующих таблицах данных.

А также есть

  • field_config

Конфигурация основного поля

  • field_config_instance

Конфигурация поля в конкретном комплекте объектов.

Вам также может понадобиться настроить флаг «удален»:

например:

UPDATE field_config SET deleted = 0 where field_name = 'field_my_deleted_field';
UPDATE field_config_instance SET deleted = 0 where field_name = 'field_my_deleted_field';
TRUNCATE TABLE cache_field;
Дэвид Томас
источник
2
Спасибо за быстрый ответ. Редактирование баз данных field_config и field_config_instance помогло.
iain maitland