Czy podczas tworzenia nowej tabeli hook_schema()
należy również dodać tę tabelę hook_update_N()
? A może jest jakaś sztuczka lub coś, co przeoczyłem, aby aktualizacje danych automatycznie dodawały tabele?
Dokumentacja hook_update_N () nie wyjaśnia niczego na temat wprowadzania nowych tabel, podczas gdy dokumentacjahook_schema()
mówi:
Tabele zadeklarowane przez ten hook zostaną automatycznie utworzone przy pierwszym włączeniu modułu i usunięte po odinstalowaniu modułu.
(Highlight is my)
A jeśli tak, jak najlepiej uniknąć powielania definicji schematów dla nowej tabeli zarówno w hook_update_N (), jak i hook_schema (). Po prostu odnosząc się do schematu w następujący sposób:
function hook_update_N(&$sandbox) {
$schema = hook_schema();
$name = "foo";
$table = $schema["foo"];
db_create_table($name, $table);
}
Wydaje się, że działa, ale przy ponownej zmianie tabeli nie powiedzie się, jeśli użytkownik uruchomi aktualizacje i dostanie dwa lub więcej hook_update_N () s. W końcu: pierwsza hook_update_N zainstaluje już poprawną bazę danych, a druga hook_update_M () spróbuje dodać / zmienić / zmienić kolumny, które były już aktualne.
Jak sobie z tym radzisz?
Odpowiedzi:
Więc po prostu skopiuj wklej z drupal.org. Musisz również dodać definicję schematu do hook_schema.
źródło
mymodule_update_7101 () jest dobry, wraz z tym hookiem, jeśli dodamy hook_install (), aby wykonać to samo, podczas gdy instalacja modułu zamiast definicji hook_schema () również działa dla mnie.
źródło
hook_install()
nie powinien wywoływać żadnych implementacji hook_update_N (), dla prostego faktu:hook_install()
służy do instalowania modułu po raz pierwszy, co oznacza, że nie ma tabel do aktualizacji. Ponadto kod nie będzie działał w przypadku aktualizacji, które wymagają uruchomienia partii.