Comment réexécuter les mises à jour (changer la version du schéma du module)?

22

Je travaille sur un module et j'ai changé quelques types de champs dans le schéma. Je n'ai pas pris de sauvegarde avant de la tester et de gâcher la base de données (c'est juste un site de développement). Quoi qu'il en soit, j'ai tout réinstallé et la version du schéma est définie sur celle de la mise à jour la plus élevée. Cependant, j'ai réellement besoin d'exécuter la mise à jour; une vue que je n'aurais pas installée si j'avais le schéma mis à jour dans le code du module, j'ai donc pensé que ce serait un bon moyen de tester cette mise à jour.

Comment réinitialiser la version de schéma de mon module sur une version particulière? Dans Drupal 7, j'aurais fait ceci:

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

wizonesolutions
la source

Réponses:

47

Bien que l'accès à l'état fonctionne directement, vous pouvez également utiliser l'API: drupal_set_installed_schema_version () . Qui existe réellement inchangé au moins depuis 4.7, comme visible sur la page de documentation liée. Probablement l'une des rares fonctions API qui existait depuis si longtemps;)

Pour le définir à partir du drush:

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

Remarque: Dans Drupal 7, vous devez ajouter un supplément include 'includes/install.inc';.

Berdir
la source
5
Aussi bien si vous avez simplement besoin de vérifier rapidement: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin
or drush pm-info modulename
Beanluc
10

Drupal 8 utilise désormais le keyvalueservice pour stocker des informations sur la version du schéma. Il s'agit de la même API que l' API d'état elle-même utilise.

Les informations sur les valeurs sont sérialisées lorsqu'elles sont stockées dans la base de données, donc l'utilisation d'une requête SQL directe n'est pas optimale. À la place, utilisez drush php-eval(ou un script qui démarre Drupal, si vous n'avez pas Drush) pour exécuter ce qui suit:

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

Changement fillpdfet 8102à votre nom du module et souhaité la version du schéma, respectivement.

La forme Drush de cette commande est:

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

wizonesolutions
la source
0

Pour définir et obtenir les mises à jour du module via le code (sans Drush). Ci-dessous le code

GET  = drupal_get_installed_schema_version('moduleName');

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

Peut également aller le mettre à jour directement dans la base de données. Si vous utilisez quelque chose comme Sequel Pro (mac) ou tout autre outil d'interface utilisateur de base de données que windows / linux a, c'est vraiment facile. Sans doute pas la meilleure idée, et je ne conseillerais pas de le faire contre une base de données de niveau de production, mais cela fera le travail!

Table = valeur_clé

collection = system.schema
name = fillpdf (your_module)
value = update to i: 8102;

ZhuRenTongKu
la source