更新を再実行(モジュールスキーマバージョンを変更)するにはどうすればよいですか?


22

私はモジュールに取り組んでおり、スキーマ内のいくつかのフィールドタイプを変更しました。私はそれをテストする前にバックアップを取らず、DBを台無しにしました(これは単なる開発サイトです)。とにかく、私はすべてを再インストールし、スキーマのバージョンは最新のアップデートのバージョンに設定されています。ただし、実際には更新を実行する必要があります。モジュールコードに更新されたスキーマがある場合、インストールしていないビューなので、これはその更新をテストするのに適した方法であると考えました。

モジュールのスキーマバージョンを特定のバージョンにリセットするにはどうすればよいですか?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関数の1つです;)

ブラシから設定するには:

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

またはpm-infoモジュール名を
消す

10

Drupal 8は、このkeyvalueサービスを使用して、スキーマバージョンに関する情報を保存するようになりました。これは、State API自体が使用するものと同じAPI です。

値情報はデータベースに保存されるときにシリアル化されるため、直接SQLクエリを使用するのは最適ではありません。代わりに、drush php-eval(またはDrushがない場合はDrupalをブートストラップするスクリプト)を使用して、次を実行します。

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

変更fillpdf8102、それぞれ自分のモジュール名に、目的のスキーマのバージョン、。

このコマンドの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)などのデータベースUIツールwindows / linuxを使用している場合は、本当に簡単です。間違いなく最善のアイデアではなく、実稼働レベルのデータベースに対してこれを行うことはお勧めしませんが、仕事は完了します!

テーブル= key_value

コレクション= system.schema
名前= fillpdf(your_module)
値= i:8102に更新。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.