web-dev-qa-db-fra.com

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

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 à une version particulière? En Drupal 7, j'aurais fait ceci:

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

25
wizonesolutions

Alors 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 include 'includes/install.inc';.

55
Berdir

Drupal 8 utilise désormais le service keyvalue pour stocker des informations sur la version du schéma. Il s'agit de la même API que la State API 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);
?>

Remplacez fillpdf et 8102 Par le nom de votre module et la version de schéma souhaitée, respectivement.

La forme Drush de cette commande est:

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

12
wizonesolutions

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");
0
Vernit Gupta

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 Windows/Linux, 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
nom = fillpdf (votre_module)
valeur = mise à jour vers i: 8102;

0
ZhuRenTongKu