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

8

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

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

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

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

giorgio79
источник
Взгляните на мой ответ в drupal.stackexchange.com/questions/46085/…
бариста-любитель

Ответы:

27

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

drush eval 'field_delete_field("yourfield")'
Jance
источник
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 таблицах.

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

tenken
источник
1
Пожалуйста, не делайте этого. Смотрите ответ ниже: field_delete_field (), который будет вызывать любые соответствующие хуки и очищать кеш. В общем, если вы пишете SQL или работаете непосредственно в базе данных, вы делаете что-то не так.
Аарон Бауман
1
Если добавление полей не удалось в пользовательском интерфейсе. Почему вы предполагаете, что API все еще будет работать для удаления искаженных данных / таблиц? Я согласен с вашим общим ответом, я не согласен с ним в 100% случаев.
Тенкен
Вы правы - я не полностью прочитал оригинальный вопрос. Виноват! Предпочтительным методом является использование field_delete_field (), но если это не удастся, то переход к базе данных, вероятно, является лучшей / единственной альтернативой.
Аарон Бауман