Рейтинг:2

Проблема с удалением модуля сбора полей

флаг cn

Недавно мы успешно мигрировали в нашем экземпляре drupal 8 с модуля сбора полей (последняя альфа-версия) на параграфы. Теперь я пытаюсь удалить модуль сбора полей из нашего экземпляра drupal, но его нельзя удалить, так как он «используется в поле field_collection_item.field_sprechzeiten_zeitraum» (см. скриншот из режима удаления).

удаление field_collection запрещено

Когда я пытаюсь удалить это поле field_sprechzeiten_zeitraum, отображается следующее сообщение об ошибке:

Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[42S02]: базовая таблица или представление не найдено: 1146 Таблица 'druco_stage.field_collection_item__field_sprechzeiten_zeitraum' не существует: SELECT 'entity_id' FROM {field_collection_item__field_sprechzeiten_zeitraum} WHERE 'bundle' = 'field_s; Массив ( ) в field_collection_field_config_predelete() (строка 95 модуля modules/contrib/field_collection/field_collection.module).

Похоже, что кто-то пытался удалить это ранее, но что-то пошло не так, так как запись базы данных была удалена, но не все другие ссылки, или запись не была создана изначально.

Поскольку я не являюсь разработчиком drupal и просто администрирую этот сайт, я совершенно не знаю, как с этим бороться. Я просто хочу, чтобы модуль field_collection исчез, кто-нибудь знает, как решить эту проблему?

hotwebmatter avatar
флаг nr
Я рад, что мой ответ дал вам толчок в правильном направлении! Однако, как предложил @leymannx в комментариях ниже, лучше вырезать раздел «Изменить:» из вопроса выше и вставить его в ответ ниже, даже если вы уже приняли мой ответ. Это поможет людям в будущем, которые ищут решение подобной проблемы. Пожалуйста, рассмотрите это! Заранее спасибо.
Рейтинг:1
флаг cn

Я решил проблему, создав новую таблицу, как было предложено hotwebmatter. Это было довольно просто, потому что я мог использовать структуру других полей коллекции полей и просто переименовать поле значения. Структура выглядела так:

field_collection_item__field_sprechzeiten_zeitraum: таблица
+ столбцы
    комплект: varchar(128)
    удалено: tinyint(4) NN
    entity_id: int(10) NN
    id_revision: целое (10)
    код языка: varchar(32) NN
    дельта: int(10) NN
    field_sprechzeiten_zeitraum_value: varchar (255)
+ индексы
    комплект: тип индекса (пакета) btree
    ревизия_ид: индекс (revision_id) типа btree
+ ключи
    #1: PK (entity_id, удалено, код языка, дельта)

После создания этого я очистил объекты коллекции полей (в разделе удаления была ссылка) и удалил оставшиеся поля в моих типах контента. Флажок для удаления модуля все еще был отключен, поэтому я удалил все таблицы в базе данных, содержащие field_deleted_data и field_deleted_revision. Это не помогло, поэтому я искал в таблице конфигов строчку с названием core.extension. Здесь я десериализовал данные, удалил часть с коллекцией полей и снова сериализовал.

Между ними я всегда запускаю задание cron и очищаю кеши. Флажок для удаления все еще был отключен, и случайно я увидел, что флажок сбора полей в разделе установки модуля больше не установлен. Я проверил его и попытался установить его. Это началось, и затем меня перенаправили в раздел установки модуля. коллекция полей все еще не была проверена, и когда я изучил вкладку удаления, она наконец исчезла.

Это было изнурительно, но со счастливым концом.

Рейтинг:1
флаг nr

Есть ли у вас старые резервные копии базы данных? Вы можете развернуть копию сайта в локальной среде разработки и восстановить старую версию базы данных, чтобы увидеть, можно ли воссоздать отсутствующие таблицы, что позволит вам удалить поле_коллекция модуль.

Как правило, вносить такие изменения непосредственно в базу данных — плохая идея (вероятнее всего, именно это кто-то и сделал, чтобы создать проблему), но вы можете создать пустую таблицу с той же структурой, проанализировав таблицу в старая резервная копия:

ОПИСАТЬ field_collection_item__field_sprechzeiten_zeitraum;

Вооружившись этой информацией, вы сможете создать соответствующую структуру таблицы в рабочей базе данных — опять же, работая в локальной копии, а не на рабочем сервере.

Если подходящих резервных копий нет, вы можете использовать поле_коллекция модуль для добавления field_collection_item__field_sprechzeiten_zeitraum к field_sprechzeiten пучок. (Вы не сможете воссоздать содержимое поля таким образом, но вы все равно пытаетесь его удалить.)

Как только отсутствующая таблица существует (даже если она пуста), вы можете удалить поле без ошибок и удалить модуль. Удачи.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.