Как перезапустить обновления (изменить версию схемы модуля)?


22

Я работаю над модулем, и я изменил пару типов полей в схеме. Я не делал резервную копию перед тестированием и испортил БД (это просто сайт разработчика). Во всяком случае, я переустановил все, и версия схемы настроена на самое высокое обновление. Тем не менее, мне действительно нужно запустить обновление; Представление, которое я не установил бы, если бы у меня была обновленная схема в коде модуля, поэтому я решил, что это будет хороший способ проверить это обновление.

Как сбросить версию схемы моего модуля до определенной версии? В 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:

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 modulename
Beanluc

10

Drupal 8 теперь использует keyvalueсервис для хранения информации о версии схемы. Это тот же API, который использует сам State API .

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

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

Изменение fillpdfи 8102к вашему имени модуля и нужная версия схемы, соответственно.

Форма Drush этой команды:

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


0

Для SET и GET обновления модуля через код (без Drush). Ниже приведен код

GET  = drupal_get_installed_schema_version('moduleName');

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

0

Также можно перейти обновить его непосредственно в базе данных. Если вы используете что-то вроде Sequel Pro (mac) или какой-либо другой инструмент интерфейса пользователя базы данных Windows / Linux, это действительно просто. Возможно, это не самая лучшая идея, и я бы не советовал делать это в отношении базы данных производственного уровня, но она справится с работой!

Table = key_value

collection = system.schema
name = fillpdf (your_module)
значение = обновить до i: 8102;

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.