Como executo as atualizações (alterar a versão do esquema do módulo)?

22

Estou trabalhando em um módulo e alterei alguns tipos de campos no esquema. Eu não fiz um backup antes de testá-lo e baguncei o banco de dados (é apenas um site de desenvolvimento). De qualquer forma, reinstalei tudo e a versão do esquema está definida como a atualização mais alta. No entanto, eu realmente preciso executar a atualização; uma Vista que eu não instalaria se tivesse o esquema atualizado no código do módulo, então achei que seria uma boa maneira de testar essa atualização.

Como redefinir a versão do esquema do meu módulo para uma versão específica? No Drupal 7, eu teria feito isso:

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

wizonesolutions
fonte

Respostas:

47

Enquanto o acesso ao estado funciona diretamente, você também pode usar a API: drupal_set_installed_schema_version () . O que realmente existe inalterado pelo menos desde 4.7, conforme visível na página de documentação vinculada. Provavelmente uma das poucas funções da API que existiam por tanto tempo;)

Para configurá-lo do drush:

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

Nota: No Drupal 7, você precisa adicionar mais include 'includes/install.inc';.

Berdir
fonte
5
Também é bom se você simplesmente precisa verificar rapidamente: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin 23/17
ou drush pm-info modulename
Beanluc 11/09/18
10

O Drupal 8 agora usa o keyvalueserviço para armazenar informações sobre a versão do esquema. Essa é a mesma API que a própria API de estado usa.

As informações de valor são serializadas quando armazenadas no banco de dados, portanto, o uso de uma consulta SQL direta é subótimo. Em vez disso, use drush php-eval(ou um script que inicialize o Drupal, se você não tiver o Drush) para executar o seguinte:

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

Altere fillpdfe 8102para o nome do módulo e a versão do esquema desejada, respectivamente.

A forma Drush deste comando é:

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

wizonesolutions
fonte
0

Para SET e GET atualizações do módulo via código (sem Drush). Abaixo está o código

GET  = drupal_get_installed_schema_version('moduleName');

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

Também pode ir atualizá-lo diretamente no banco de dados. Se você estiver usando algo como o Sequel Pro (mac) ou qualquer outra ferramenta de interface do usuário do banco de dados, o windows / linux tem muito fácil. Indiscutivelmente, não é a melhor idéia e não seria aconselhável fazer isso em um banco de dados no nível de produção, mas ele fará o trabalho!

Tabela = valor_chave

coleção =
nome do system.schema = fillpdf (your_module)
value = atualização para i: 8102;

ZhuRenTongKu
fonte