Як повторно запустити оновлення (змінити схему модульної версії)?


22

Я працюю над модулем, і я змінив кілька типів полів у схемі. Я не брав резервну копію перед її тестуванням і переплутав БД (це просто сайт розробника). У всякому разі, я перевстановив усе, і версія схеми встановлена ​​на найвищу версію оновлення. Однак мені дійсно потрібно запустити оновлення; a Перегляд я б не встановив, якби в коді модуля була оновлена ​​схема, тому я вважав, що це хороший спосіб перевірити це оновлення.

Як повернути версію схеми мого модуля до певної версії? У Drupal 7 я зробив би це:

drush sqlq "UPDATE system SET schema_version=8102 WHERE name='flllpdf' AND type='module'"

Відповіді:


47

Під час доступу до стану безпосередньо працює, ви також можете просто використовувати API: drupal_set_installed_schema_version () . Що насправді існує незмінним принаймні з 4.7, як це видно на пов'язаній сторінці документації. Напевно, одна з небагатьох функцій API, яка існувала так довго;)

Щоб встановити його з друку:

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

Примітка. У Drupal 7 потрібно додати додаткові include 'includes/install.inc';.


5
Також добре, якщо вам просто потрібно швидко перевірити: drush ev "echo drupal_get_installed_schema_version (" MODULE ")"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin

або drush pm-info
module name

10

Drupal 8 тепер використовує keyvalueсервіс для зберігання інформації про версію схеми. Це той самий API, який використовує сам API API .

Інформація про значення серіалізується при зберіганні в базі даних, тому використання прямого запиту SQL є неоптимальним. Натомість використовуйте drush php-eval(або сценарій, що завантажує Drupal, якщо у вас немає Drush) для виконання наступного:

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

Зміна fillpdfі 8102до вашого імені модуля і потрібна версія схеми, відповідно.

Форма друку цієї команди:

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


0

Встановити та Отримати оновлення модуля за допомогою коду (без натискання). Нижче - код

GET  = drupal_get_installed_schema_version('moduleName');

SET = drupal_set_installed_schema_version("moduleName", "8000");

0

Можна також оновити його безпосередньо в базі даних. Якщо ви використовуєте щось на зразок Sequel Pro (mac) або будь-який інший інструмент користувальницького інтерфейсу Windows / linux, це дуже просто. Можливо, це не найкраща ідея, і не радимо робити це проти бази даних про рівень виробництва, але це виконає роботу!

Таблиця = ключове значення

collection = system.schema
name = fillpdf (your_module)
значення = оновлення до i: 8102;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.