Pracuję nad modułem i zmieniłem kilka typów pól w schemacie. Nie wziąłem kopii zapasowej przed przetestowaniem i zepsułem DB (to tylko strona deweloperska). W każdym razie przeinstalowałem wszystko, a wersja schematu jest ustawiona na najwyższą aktualizację. Jednak tak naprawdę muszę uruchomić aktualizację; Widok, którego nie zainstalowałbym, gdybym miał zaktualizowany schemat w kodzie modułu, więc pomyślałem, że byłby to dobry sposób na przetestowanie tej aktualizacji.
Jak zresetować wersję schematu mojego modułu do konkretnej wersji? W Drupal 7 zrobiłbym to:
drush sqlq "UPDATE system SET schema_version=8102 WHERE name='flllpdf' AND type='module'"
Drupal 8 używa teraz tej
keyvalue
usługi do przechowywania informacji o wersji schematu. Jest to ten sam interfejs API , z którego korzysta sam interfejs API stanu .Informacje o wartości są serializowane, gdy są przechowywane w bazie danych, więc użycie bezpośredniego zapytania SQL jest nieoptymalne. Zamiast tego użyj
drush php-eval
(lub skryptu, który uruchamia Drupala, jeśli nie masz Drusha), aby wykonać następujące czynności:Zmiana
fillpdf
i8102
do nazwy modułu i pożądana wersja schematu, odpowiednio.Forma Drush tego polecenia to:
drush ev "\Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102)";
źródło
Aby ustawić i pobrać aktualizacje modułu za pomocą kodu (bez Drush). Poniżej znajduje się kod
źródło
Może także przejść do aktualizacji bezpośrednio w bazie danych. Jeśli używasz czegoś takiego jak Sequel Pro (Mac) lub jakikolwiek inny interfejs użytkownika bazy danych Windows / Linux ma to naprawdę proste. Prawdopodobnie nie jest to najlepszy pomysł i nie odradzałbym tego w przypadku bazy danych na poziomie produkcyjnym, ale wykona to zadanie!
Tabela = wartość_klucza
collection = system.schema
name = fillpdf (twój_moduł)
wartość = aktualizacja do i: 8102;
źródło