Как вручную или программно удалить поле?


8

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

Теперь, когда я пытаюсь добавить поле снова, я получаю:

Машиночитаемое имя уже используется. Это должно быть уникальным.

Я думаю, что некоторые таблицы были заполнены в БД. Как я могу удалить это легко?


Ответы:


27

Вы также можете использовать Drush для запуска field_delete_field(). Просто беги:

drush eval 'field_delete_field("yourfield")'

1
Хороший вызов, намного чище, чем охота через БД. Затем запустите cron или field_purge_batch ().
Литтлединамо

2
Это отлично! К вашему сведению, эта функция не полностью удаляет данные. Он добавляет таблицу БД для каждого поля, имя которого начинается с «field_deleted_data_». Это, наверное, хорошая вещь. Но люди могут захотеть закончить работу, опустив эти столы.
Шай

1
Данные для удаленных полей удаляются во время работы cron. Пожалуйста, не отбрасывайте эти таблицы, так как это может привести к WSOD на вашем сайте drupal.
Аарон Бауман

4

Ух ты, создание поля занимает около 2 секунд ... но если оно оборвалось, я думаю, оно оборвалось.

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

  • Dropтаблицы field_data_FIELD_THE_NAME_YOU_GAVE_ITи field_revision_FIELD_THE_NAME_YOU_GAVE_IT.

  • Также найдите field_configи field_config_instanceнайдите nameключи (и bundleключи) для поля + связки, к которым вы привязали указанное поле. Удалите эти записи в этих 2 таблицах.

  • Очистите кеш вашего сайта.


1
Пожалуйста, не делайте этого. Смотрите ответ ниже: field_delete_field (), который будет вызывать любые соответствующие хуки и очищать кеш. В общем, если вы пишете SQL или работаете непосредственно в базе данных, вы делаете что-то не так.
Аарон Бауман

1
Если добавление полей не удалось в пользовательском интерфейсе. Почему вы предполагаете, что API все еще будет работать для удаления искаженных данных / таблиц? Я согласен с вашим общим ответом, я не согласен с ним в 100% случаев.
Тенкен

Вы правы - я не полностью прочитал оригинальный вопрос. Виноват! Предпочтительным методом является использование field_delete_field (), но если это не удастся, то переход к базе данных, вероятно, является лучшей / единственной альтернативой.
Аарон Бауман
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.