Drupal 7 gelöschtes Feld wiederherstellen

In Drupal gibt es vordefinierte Eingabefelder für jeden Standard Content-Type. Wer das erweitern will kann extra Felder für z. B. Bildupload, eMail Adresse, Internetadresse, Telefon Nr. usw. anlegen

Was ist aber los, wenn irrtümlich ein Feld im Content-Type gelöscht wird. Wie kann das gelöschte Drupal Feld zurückgesetzt werden? Ein schwierige Situation, denn es gib keine "Recover", "Undo", "Reset" oder "Zurücksetzen" Funktion für irrtümlich gelöschte Felder in Drupal.

Felder werden Drupal nicht gelöscht. Die Werte sind noch vorhanden. Man sollte das aber gleich wieder zurücksetzen.

Drupal Tabellen für Felder (Fields)

Folgende Tabellen müssen über MySQL Commands angepasst werden um den alten Zustand wiederherzustellen. Wir unterscheiden zwischen:

a) Standard Tabellen

  • field_config
  • field_config_instance
  • cache_field

b) Feld Tabellen

Angenommen das Feld hatte den internen Namen (machine_name) "test". Dann legt Drupal folgende Tabellen je Feld an.

  • field_data_test
  • field_revision_test

oder

  • field_data_field_node_test
  • field_revision_field_node_test

Dort sind nach wie vor die Daten erhalten, jedoch sind in allen 4 Tabellen in unserem Beispiel Werte auf - sagen wir mal - Status deleted gesetzt.

Zurücksetzen / Wiederherstellen gelöschter Felder in Drupal

Zuerst ein Backup oder "dump" der MySQL Datenbank machen. Nur in einer Development Umgebung arbeiten

Vorarbeiten

Backup erstellen bzw. Pojekt klonen

Cache deaktivieren unter Administration > Configuration > Development

MySQL Commands

Zuerst setzen wir den wert im Feld deleted für das Feld

 

UPDATE field_config SET deleted = 0 where field_name = 'field_data_field_node_test';
UPDATE field_config_instance SET deleted = 0 wherefield_name = 'field_data_field_node_test';

Die Tabelle mit Cache für die Felder leeren (Hinweis: Truncate setzt autoimcrement auf 0).

TRUNCATE TABLE cache_field;

In einigen Online Beispielen wird nicht erwähnt, dass die jeweiligen Einträge auch einen Wert deleted=1, der auf deleted=0 gesetzt werden muss. Ansonsten sieht man im Content-Type das Feld wieder, jedoch werden diese nicht als Inhalt angezeigt.

UPDATE field_revision_field_node_test SET deleted=0 WHERE deleted=1;
UPDATE field_data_field_node_test SET deleted=0 WHERE deleted=1<

Fazit

Es gibt keine "undo" Funktion und man muss direkt auf die Datenbank gehen und dort die Tabellen zurücksetzen. Für Drupal 7.43 wurde o.g. Beispiel eingesetzt und alle Verknüpfungen zu dem gelöschten Feld waren wieder da.