Como excluir manual ou programaticamente um campo?


8

Eu tentei criar um campo, mas meu servidor ficou com a metade do erro interno de servidor devido a algum ataque de spambot ...

Agora, quando tento adicionar o campo novamente, estou recebendo:

O nome legível por máquina já está em uso. Deve ser único.

Eu acho que algumas tabelas foram preenchidas no banco de dados. Como posso removê-los facilmente?


Dê uma olhada na minha resposta em drupal.stackexchange.com/questions/46085/...
barista amador

Respostas:


27

Você também pode usar drush para executar field_delete_field(). Apenas corra:

drush eval 'field_delete_field("yourfield")'

11
Boa chamada, muito mais limpa do que caçar no banco de dados. Execute o cron depois também ou field_purge_batch ().
Littledynamo

2
Isto e excelente! Para sua informação, essa função não exclui completamente os dados. Ele adiciona uma tabela db para cada campo cujo nome começa "field_deleted_data_". Provavelmente isso é uma coisa boa. Mas as pessoas podem querer terminar o trabalho descartando essas tabelas.
Shai

11
Os dados para os campos excluídos são eliminados durante as execuções do cron. Por favor, não descarte essas tabelas, pois isso poderia causar o WSOD no seu site drupal.
Aaronbauman 16/09/2015

4

Uau, criar um campo leva cerca de 2 segundos ... mas se for uma porcaria, acho que é uma porcaria.

Já que você não sabe "onde" ele é ruim, basicamente você terá que procurar nas tabelas para ter certeza de que limpará o que estiver lá ...

  • Dropas mesas field_data_FIELD_THE_NAME_YOU_GAVE_ITe field_revision_FIELD_THE_NAME_YOU_GAVE_IT.

  • Também procure field_confige field_config_instanceprocure as namechaves (e as bundlechaves) do campo + pacotes configuráveis ​​aos quais você vinculou o campo nomeado. Exclua essas entradas nessas 2 tabelas também.

  • Limpe o cache do site.


11
Por favor não faça isso. Veja a resposta abaixo: field_delete_field () que invocará quaisquer ganchos relevantes e também limpará o cache. Em geral, se você estiver escrevendo SQL ou operando diretamente no banco de dados, estará fazendo algo errado.
aaronbauman 16/09/2015

11
Se a adição de campos falhou na interface do usuário. Por que você presumiria que a API ainda funcionaria para excluir dados / tabelas malformados? Concordo com sua resposta geral, discordo de 100% de todos os casos.
Dez16

Você está certo - eu não li completamente a pergunta original. Foi mal! O método preferido é usar field_delete_field (), mas se falhar, ir diretamente ao banco de dados provavelmente é a melhor / única alternativa.
aaronbauman 16/09/2015
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.