Wie lösche ich ein Feld manuell oder programmgesteuert?

8

Ich habe versucht, ein Feld zu erstellen, aber mein Server ist aufgrund eines Spambot-Angriffs auf halbem Weg mit einem internen Serverfehler ausgefallen ...

Wenn ich jetzt versuche, das Feld erneut hinzuzufügen, erhalte ich Folgendes:

Der maschinenlesbare Name wird bereits verwendet. Es muss einzigartig sein.

Ich denke, einige Tabellen wurden in der Datenbank gefüllt. Wie kann ich diese leicht entfernen?

giorgio79
quelle
Werfen
Amateur Barista

Antworten:

27

Sie können auch Drush zum Laufen verwenden field_delete_field(). Renn einfach:

drush eval 'field_delete_field("yourfield")'
Jance
quelle
1
Guter Anruf, viel sauberer als die Jagd durch die Datenbank. Führen Sie anschließend auch cron oder field_purge_batch () aus.
littledynamo
2
Das ist ausgezeichnet! Zu Ihrer Information, diese Funktion löscht die Daten nicht vollständig. Es wird eine DB-Tabelle für jedes Feld hinzugefügt, dessen Name mit "field_deleted_data_" beginnt. Das ist wahrscheinlich eine gute Sache. Aber die Leute möchten den Job vielleicht beenden, indem sie diese Tische fallen lassen.
Shai
1
Daten für gelöschte Felder werden während der Cron-Läufe gelöscht. Bitte lassen Sie diese Tabellen nicht fallen, da dies zu einer WSOD Ihrer Drupal-Site führen könnte.
Aaronbauman
4

Wow, das Erstellen eines Feldes dauert ungefähr 2 Sekunden ... aber wenn es ausgefallen ist, ist es vermutlich ausgefallen.

Da Sie nicht wissen, "wo" es im Grunde genommen kaputt gegangen ist, müssen Sie nach den Tischen suchen, um sicherzugehen, dass Sie alles sauber machen, was da ist ...

  • Dropdie Tabellen field_data_FIELD_THE_NAME_YOU_GAVE_ITund field_revision_FIELD_THE_NAME_YOU_GAVE_IT.

  • Auch in field_configund field_config_instancesuchen nameTasten (und die bundleTasten) für das Feld + bündelt Sie den benannten Bereich gebunden. Löschen Sie auch diese Einträge in diesen beiden Tabellen.

  • Leeren Sie Ihren Site-Cache.

Tenken
quelle
1
Bitte mach das nicht. Siehe Antwort unten: field_delete_field (), das alle relevanten Hooks aufruft und auch den Cache bereinigt. Wenn Sie SQL schreiben oder direkt in der Datenbank arbeiten, machen Sie im Allgemeinen etwas falsch.
Aaronbauman
1
Wenn das Hinzufügen von Feldern in der Benutzeroberfläche fehlgeschlagen ist. Warum sollten Sie davon ausgehen, dass die API weiterhin funktioniert, um fehlerhafte Daten / Tabellen zu löschen? Ich stimme Ihrer allgemeinen Antwort zu, ich stimme ihr in 100% aller Fälle nicht zu.
Tenken
Sie haben Recht - ich habe die ursprüngliche Frage nicht gründlich gelesen. Mein Fehler! Die bevorzugte Methode ist die Verwendung von field_delete_field (). Wenn dies jedoch fehlschlägt, ist es wahrscheinlich die beste / einzige Alternative, direkt in die Datenbank zu wechseln.
Aaronbauman