如何重新运行更新(更改模块架构版本)?


22

我正在开发一个模块,并且更改了架构中的几个字段类型。在测试并弄乱数据库之前,我没有备份(这只是一个开发站点)。无论如何,我都重新安装了所有内容,并且将架构版本设置为最新更新的版本。但是,我实际上确实需要运行该更新。如果模块代码中有更新的架构,则不会安装View,因此我认为这是测试该更新的好方法。

如何将模块的架构版本重置为特定版本?在Drupal 7中,我会这样做:

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

Answers:


47

当直接访问状态有效时,您也可以只使用API​​:drupal_set_installed_schema_version()。至少从4.7开始,它实际上就没有变化,如链接的文档页面上所示。可能存在这么长时间的少数API函数之一;)

要设置从仓促:

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

注意:在Drupal 7中,您需要添加extra 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

或输入pm-info模块
名称-Beanluc

10

Drupal 8现在使用该keyvalue服务存储有关架构版本的信息。这是State API本身使用的相同API 。

值信息存储在数据库中时会被序列化,因此使用直接SQL查询是次优的。而是使用drush php-eval(或,如果没有Drush,则引导Drupal的脚本)执行以下命令:

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

分别将fillpdf和更改8102为您的模块名称和所需的架构版本。

此命令的Drush形式为:

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


0

通过代码设置和获取模块更新(无Drush)。下面是代码

GET  = drupal_get_installed_schema_version('moduleName');

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

0

也可以直接在数据库中更新它。如果您使用的是Sequel Pro(mac)之类的工具,或者使用Windows / linux拥有的任何数据库UI工具,这真的很简单。可以说这不是最好的主意,也不建议针对生产级别的数据库执行此操作,但是它将完成工作!

表格=键值

集合= system.schema
名称= fillpdf(您的模块)
值=更新至i:8102;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.