Come rieseguire gli aggiornamenti (cambiare la versione dello schema del modulo)?


22

Sto lavorando su un modulo e ho cambiato un paio di tipi di campi nello schema. Non ho fatto un backup prima di testarlo e ho incasinato il DB (è solo un sito di sviluppo). Ad ogni modo, ho reinstallato tutto e la versione dello schema è impostata su quella dell'aggiornamento più alto. Tuttavia, in realtà ho bisogno di eseguire l'aggiornamento; una vista che non avrei installato se avessi lo schema aggiornato nel codice del modulo, quindi ho pensato che sarebbe stato un buon modo per testare quell'aggiornamento.

Come reimpostare la versione dello schema del mio modulo su una versione particolare? In Drupal 7, avrei fatto questo:

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

Risposte:


47

Mentre l'accesso allo stato funziona direttamente, puoi anche usare semplicemente l'API: drupal_set_installed_schema_version () . Che in realtà esiste invariato almeno dalla 4.7, come visibile nella pagina della documentazione collegata. Probabilmente una delle poche funzioni API esistenti da così tanto tempo;)

Per impostarlo da Drush:

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

Nota: in Drupal 7 è necessario aggiungere ulteriori include 'includes/install.inc';.


5
Bello anche se devi semplicemente controllare rapidamente: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin

o drush pm-info nome modul
Beanluc

10

Drupal 8 ora utilizza il keyvalueservizio per archiviare informazioni sulla versione dello schema. Questa è la stessa API utilizzata dall'API di stato stessa.

Le informazioni sul valore vengono serializzate quando archiviate nel database, pertanto l'utilizzo di una query SQL diretta non è ottimale. Invece, usa drush php-eval(o uno script che avvia Drupal, se non hai Drush) per eseguire quanto segue:

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

Cambiare fillpdfe 8102al nome del modulo e versione dello schema desiderato, rispettivamente.

La forma Drush di questo comando è:

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


0

Per impostare e ottenere aggiornamenti del modulo tramite codice (senza Drush). Di seguito è riportato il codice

GET  = drupal_get_installed_schema_version('moduleName');

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

0

Può anche andare aggiornarlo direttamente nel database. Se stai usando qualcosa come Sequel Pro (mac) o qualsiasi strumento di interfaccia utente del database di Windows / Linux sia davvero facile. Probabilmente non è la migliore idea e non consiglierei di farlo su un database a livello di produzione, ma farà il lavoro!

Tabella = key_value

collection = system.schema
name = fillpdf (your_module)
valore = aggiorna a i: 8102;

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.