Jak ponownie uruchomić aktualizacje (zmienić wersję schematu modułu)?

22

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'"

wizonesolutions
źródło

Odpowiedzi:

47

Podczas bezpośredniego dostępu do stanu można również użyć interfejsu API: drupal_set_installed_schema_version () . Który faktycznie istnieje bez zmian przynajmniej od 4.7, jak widać na stronie z dokumentacją. Prawdopodobnie jedna z niewielu funkcji API, które istniały tak długo;)

Aby ustawić z drush:

drush ev "drupal_set_installed_schema_version('fillpdf', 8012)"

Uwaga: W Drupal 7 musisz dodać dodatkowe include 'includes/install.inc';.

Berdir
źródło
5
Również miło, jeśli po prostu chcesz szybko sprawdzić: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin
lub drush pm-info modulename
Beanluc
10

Drupal 8 używa teraz tej keyvalueusł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:

<?php
  \Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102);
?>

Zmiana fillpdfi 8102do nazwy modułu i pożądana wersja schematu, odpowiednio.

Forma Drush tego polecenia to:

drush ev "\Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102)";

wizonesolutions
źródło
0

Aby ustawić i pobrać aktualizacje modułu za pomocą kodu (bez Drush). Poniżej znajduje się kod

GET  = drupal_get_installed_schema_version('moduleName');

SET = drupal_set_installed_schema_version("moduleName", "8000");
Vernit Gupta
źródło
0

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;

ZhuRenTongKu
źródło