Odzyskaj usunięte pole

11

Mam typ zawartości z 4 polami, z których każde jest terminem referencyjnym. Istnieje 100 węzłów, każdy z 4 przypisanymi terminami. Przypadkowo usunąłem jedno z tych pól z admin> struktura> typy zawartości> typ mycontent ... w wyniku czego wszystkie 100 węzłów utraciło odwołanie do terminu, które zawierało to utracone pole.

Po zainstalowaniu modułu Administrator bazy danych zauważyłem, że baza danych dla mojego usuniętego pola jest nadal obecna, zmieniono jej nazwę na coś w rodzaju „field_deleted_field_74”

  1. Za pomocą mysql mogłem zmienić nazwę tej bazy danych z powrotem na „nazwa_pola_pola_początkowej_oryginalnej nazwy” - tj. Używając oryginalnej nazwy komputera dla usuniętego pola
  2. Ponadto udało mi się zmienić wartość usuniętej kolumny w tej bazie danych z „1” na „0”.

Zrobiłem to powyżej z inną bazą „duchów”, którą znalazłem, i która nazywała się tak jak „field_revision_field_74” ...

Mój problem polega teraz na tym, że moje zmienione pole nie pojawia się jako pole istniejące wcześniej na ekranie pól zarządzania typem zawartości ani na liście admin> raporty> pola. Kiedy uruchamiam „drush field-info field”, to też go brakuje.

Jak mogę to przywrócić? Zakładam, że istnieje inna baza danych, która odwołuje się do niej, którą muszę edytować.

Dzięki!

Iain Maitland
źródło
Czy masz kopie zapasowe całej bazy danych przed usunięciem pól?
Ollie
Niestety nie. Jednak rozwiązałem problem.
iain maitland

Odpowiedzi:

14

Dobre pytanie i zaskakujące, że nie ma łatwiejszego sposobu na przywrócenie usuniętego pola, ponieważ dane są nadal dostępne.

Zakładając, że masz:

  1. Zmieniono nazwę tabel field_deleted_ * z powrotem na field_data_field_myfield i field_revision_field_myfield (te ostatnie również są ważne)
  2. Zaktualizowano flagę „usunięto” z 1 do 0 w odpowiednich tabelach danych.

Jest również

  • field_config

Główna konfiguracja pola

  • field_config_instance

Konfiguracja pola dla określonego pakietu encji.

Może być konieczne dostosowanie tam również flagi „usuniętej”:

na przykład:

UPDATE field_config SET deleted = 0 where field_name = 'field_my_deleted_field';
UPDATE field_config_instance SET deleted = 0 where field_name = 'field_my_deleted_field';
TRUNCATE TABLE cache_field;
David Thomas
źródło
2
Dziekuje za szybką odpowiedź. Edycja bazy danych field_config i field_config_instance załatwiła sprawę.
iain maitland