Как полностью удалить поле в Drupal, если оно «зависло» в хранилище полей

Иногда в Drupal возникает ситуация: вы удаляете поле с типов сущностей (bundle), но оно не исчезает полностью из системы. UI говорит, что поле «используется», хотя на самом деле ни одна сущность его не использует. В этом случае поле остаётся в конфигурации как FieldStorageConfig.

Разберёмся, как удалить такое «висящее» поле.

Почему Drupal не удаляет поле полностью

В Drupal каждое поле состоит из двух частей, например field_content:

  1. FieldStorageConfig — «хранилище» поля:
    • Определяет тип поля, имя (field_content), базовые таблицы (node__field_content, node_revision__field_content).
    • Существует только одно на весь Drupal для данного типа сущности и имени поля.
  2. FieldConfig — привязка поля к конкретному типу сущности (bundle):
    • Например, node.article.field_content или node.page.field_content.
    • Если поле используется на нескольких bundle, каждая привязка хранится отдельно.

Логика удаления:

  • При удалении поля через UI или код удаляется FieldConfig (привязка к bundle).
  • FieldStorageConfig удаляется только тогда, когда ни одна привязка больше не существует.
  • Если конфигурация field.storage.* осталась, Drupal считает, что поле ещё может использоваться и блокирует полное удаление.

Как узнать, есть ли привязки к полю

После экспорта конфигурации (drush cex) можно выполнить поиск по имени поля в директории с файлами конфигурации.

Если имя встречается только в одном файле — field.storage.node.field_content.yml, то есть в самой конфигурации поля, то значит, что поле не используется сущностями, можно его удалить.

Но Drupal иногда не делает этого, и тогда приходится выполняться операцию вручную.

Как удалить «висящее» поле полностью

Нужно выполнить php код:

Это можно сделать прямо из консоли через drush, главное корректно экранировать спец. символы:

После этого:

  • Таблицы node__field_content и node_revision__field_content будут удалены автоматически.
  • Поле полностью исчезнет из конфигурации Drupal.

Мало букафф? Читайте есчо !

Реализация блока с внедрением формы

Май 11, 2023 г.

См. основной материал для введения. В имплементации блока требуется сформировать набор переменных и передать его в шаблон. Шаблон был ранее объявлен в основном файле модуля, исходя из макета. [crayon-68dedffdc9e91719331060/] В макете присутствуют ...

Читать

Как удалить объявленный ранее @RestResource

Июль 12, 2023 г.

Сначала вы создали в Drupal rest ресурс - /Plugin/rest/resource, поработали с ним, а потом пришло время прощаться. Но вот проблема - система уже знает о ресурсе, и если вы удалите файл, то при попытке зайти в админ панель расширений /admin/modules, вы ...

Читать

Форма поиска товаров на Drupal

Май 11, 2023 г.

Здесь подробно рассмотрим небольшую задачу для сайта под управлением CMS Drupal. Требуется выводить поисковую форму для товаров в виде блока. Форма ...

Читать

Загрузка файла через форму в Drupal

Май 19, 2023 г.

Посмотрим как получить непосредственный доступ к файлу без загрузки файла в хранилище, при его загрузке в поле типа "file" Form API. Много гайдов посвящено тому как использовать поле managed_file, а для unmanaged случая считается, что разработчик ...

Читать
 

Комментарии к «Как полностью удалить поле в Drupal, если оно «зависло» в хранилище полей»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: