Comment supprimer manuellement ou par programme un champ?

8

J'ai essayé de créer un champ, mais mon serveur a craqué à mi-chemin avec une erreur de serveur interne en raison d'une attaque de spambot ...

Maintenant, quand j'essaye d'ajouter à nouveau le champ, j'obtiens:

Le nom lisible par machine est déjà utilisé. Elle doit être unique.

Je suppose que certaines tables ont été remplies dans la base de données. Comment puis-je les supprimer facilement?

giorgio79
la source
Jetez un oeil à ma réponse dans drupal.stackexchange.com/questions/46085/…
barista amateur

Réponses:

27

Vous pouvez également utiliser drush pour exécuter field_delete_field(). Exécutez simplement:

drush eval 'field_delete_field("yourfield")'
Jance
la source
1
Bon appel, beaucoup plus propre que la chasse à travers le db. Exécutez ensuite cron ou field_purge_batch ().
littledynamo
2
C'est excellent! Pour info cette fonction ne supprime pas complètement les données. Il ajoute une table db pour chaque champ dont le nom commence par "field_deleted_data_". C'est probablement une bonne chose. Mais les gens voudront peut-être terminer le travail en supprimant ces tables.
Shai
1
Les données des champs supprimés sont purgées lors des exécutions cron. Veuillez ne pas supprimer ces tables, car cela pourrait WSOD votre site drupal.
aaronbauman
4

Wow, la création d'un champ prend environ 2 secondes ... mais s'il s'est effondré, je suppose qu'il s'est effondré.

Puisque vous ne savez pas "où" ça a chié, vous devrez chercher les tables pour être sûr de nettoyer tout ce qui existe ...

  • Droples tables field_data_FIELD_THE_NAME_YOU_GAVE_ITet field_revision_FIELD_THE_NAME_YOU_GAVE_IT.

  • Également dans field_configet field_config_instancerecherchez les nameclés (et les bundleclés) pour le champ + les bundles auxquels vous avez lié le champ nommé. Supprimez également ces entrées dans ces 2 tableaux.

  • Videz le cache de votre site.

tenken
la source
1
S'il vous plaît ne faites pas cela. Voir la réponse ci-dessous: field_delete_field () qui invoquera tous les hooks pertinents et nettoiera également le cache. En général, si vous écrivez du SQL ou opérez directement dans la base de données, vous faites quelque chose de mal.
aaronbauman
1
Si l'ajout de champs a échoué dans l'interface utilisateur. Pourquoi supposeriez-vous que l'API fonctionnera toujours pour supprimer les données / tables mal formées? Je suis d'accord avec votre réponse globale, je ne suis pas d'accord avec elle pour 100% de tous les cas.
tenken
Vous avez raison - je n'ai pas lu attentivement la question d'origine. Ma faute! La méthode préférée consiste à utiliser field_delete_field (), mais si elle échoue, aller directement à la base de données est probablement la meilleure / seule alternative.
aaronbauman