Bagaimana cara menjalankan kembali pembaruan (mengubah versi skema modul)?

22

Saya sedang mengerjakan modul, dan saya mengubah beberapa tipe bidang dalam skema. Saya tidak mengambil cadangan sebelum mengujinya dan mengacaukan DB (itu hanya situs dev). Bagaimanapun, saya menginstal ulang semuanya, dan versi skema diatur ke pembaruan tertinggi. Namun, saya sebenarnya perlu menjalankan pembaruan; a Tampilan yang belum saya instal jika saya memiliki skema yang diperbarui dalam kode modul, jadi saya pikir ini akan menjadi cara yang baik untuk menguji pembaruan itu.

Bagaimana cara mereset versi skema modul saya ke versi tertentu? Di Drupal 7, saya akan melakukan ini:

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

solusi wizones
sumber

Jawaban:

47

Saat mengakses status secara langsung berfungsi, Anda juga dapat menggunakan API: drupal_set_installed_schema_version () . Yang sebenarnya ada tidak berubah setidaknya sejak 4,7, seperti yang terlihat di halaman dokumentasi yang ditautkan. Mungkin salah satu dari beberapa fungsi API yang ada begitu lama;)

Untuk mengaturnya dari drush:

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

Catatan: Di Drupal 7 Anda perlu menambahkan ekstra include 'includes/install.inc';.

Berdir
sumber
5
Juga bagus jika Anda hanya perlu memeriksa cepat: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin
atau drush pm-info modulename
Beanluc
10

Drupal 8 sekarang menggunakan keyvaluelayanan untuk menyimpan informasi tentang versi skema. Ini adalah API yang sama dengan yang digunakan oleh API Negara .

Informasi nilai diserialisasi ketika disimpan dalam database, jadi menggunakan query SQL langsung tidak optimal. Sebagai gantinya, gunakan drush php-eval(atau skrip yang bootstraps Drupal, jika Anda tidak memiliki Drush) untuk menjalankan yang berikut:

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

Ubah fillpdfdan 8102ke nama modul Anda dan versi skema yang diinginkan, masing-masing.

Bentuk Drush dari perintah ini adalah:

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

solusi wizones
sumber
0

Untuk SET dan DAPATKAN pembaruan modul melalui kode (tanpa Drush). Di bawah ini adalah kode

GET  = drupal_get_installed_schema_version('moduleName');

SET = drupal_set_installed_schema_version("moduleName", "8000");
Vernit Gupta
sumber
0

Bisa juga langsung perbarui di database. Jika Anda menggunakan sesuatu seperti Sequel Pro (mac) atau database apa pun yang dimiliki alat Windows / linux, itu sangat mudah. Boleh dibilang bukan ide terbaik, dan tidak akan menyarankan melakukan ini terhadap basis data tingkat produksi, tetapi itu akan menyelesaikan pekerjaan!

Tabel = key_value

collection = system.schema
name = fillpdf (your_module)
value = perbarui ke i: 8102;

ZhuRenTongKu
sumber