web-dev-qa-db-fra.com

À quoi servent les mises à jour d'entités drush?

Après avoir mis à jour Drupal 8 modules, j'ai été averti sur la page d'état Drupal 8) que:

Définitions d'entité/champ: Les modifications suivantes ont été détectées dans le type d'entité et les définitions de champ.

Après un peu de fouille sur Google, la solution semble être d'exécuter drush entity-updates. Cependant, je trouve cela un peu étrange car il semble que ce soit une autre commande dont il faut se souvenir ou incorporer dans son flux de travail après la mise à jour de la base de données, sans oublier que cela ne semblait pas immédiatement évident sur la façon de répondre à l'avertissement d'origine.

De plus, il arrive souvent qu'en cours de développement, vous ayez une alerte pour d'autres actions dans la page d'état, ce qui signifie que vous ne saurez pas immédiatement si vous devez agir.

Quelqu'un peut-il expliquer à quoi sert cet avertissement - ou plutôt, pourquoi cette fonctionnalité a-t-elle été introduite dans D8, et pourquoi n'est-elle pas prise en compte dans l'opération de mise à jour de la base de données mais doit être exécutée séparément?

14
njp

drush entity-updates est un outil de développement. Si vous modifiez les définitions d'entité/de champ dans votre module personnalisé, vous pouvez l'appliquer rapidement.

En production, cela ne devrait pas se produire. Si vous mettez à jour un module entre les versions officielles, le code de mise à jour du module doit gérer cela.

Mais dans votre cas, vous mentionnez que votre site est en développement. Il y a donc beaucoup de choses qui auraient pu causer cela. Soit dans votre propre code, soit dans les versions dev ou alpha des modules contrib.

J'ai trouvé cet exemple dans le CR Écriture des fonctions de mise à jour pour les mises à jour du schéma d'entité, automatisation supprimée (où il y a d'autres exemples):

/**
 * Add 'revision_translation_affected' field to 'node' entities.
 */
function node_update_8001() {
  // Install the definition that this field had in
  // \Drupal\node\Entity\Node::baseFieldDefinitions()
  // at the time that this update function was written. If/when code is
  // deployed that changes that definition, the corresponding module must
  // implement an update function that invokes
  // \Drupal::entityDefinitionUpdateManager()->updateFieldStorageDefinition()
  // with the new definition.
  $storage_definition = BaseFieldDefinition::create('boolean')
      ->setLabel(t('Revision translation affected'))
      ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
      ->setReadOnly(TRUE)
      ->setRevisionable(TRUE)
      ->setTranslatable(TRUE);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('revision_translation_affected', 'node', 'node', $storage_definition);
}
19
4k4

La commande "drush entity-updates" a été supprimée de la version 8.7.0

Voir https://www.drupal.org/node/3034742

À partir de 8.7.0, Drupal core ne prend plus en charge les mises à jour automatiques d'entités. Chaque fois qu'un type d'entité ou une définition de stockage de champ doit être créé, modifié ou supprimé, cela doit être fait avec un fonction de mise à jour explicite fournie par l'API de mise à jour et utilisant l'API fournie par le gestionnaire de mise à jour de définition d'entité.

1
Andriyun