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'"
Drupal 8 utilise désormais le
keyvalue
service 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:Changement
fillpdf
et8102
à 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)";
la source
Pour définir et obtenir les mises à jour du module via le code (sans Drush). Ci-dessous le code
la source
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;
la source