Quando você cria uma nova tabela hook_schema()
, essa tabela deve ser adicionada hook_update_N()
também? Ou há algum truque, ou algo que eu perdi, para que as atualizações de dados adicionem tabelas automaticamente?
A documentação de hook_update_N () não explica nada sobre a introdução de novas tabelas, enquanto a documentaçãohook_schema()
diz:
As tabelas declaradas por esse gancho serão criadas automaticamente quando o módulo for ativado pela primeira vez e removidas quando o módulo for desinstalado.
(Destaque é meu)
E se sim, como evitar a duplicação das definições de esquema para a nova tabela em hook_update_N () e hook_schema (). Simplesmente consultando o esquema da seguinte maneira:
function hook_update_N(&$sandbox) {
$schema = hook_schema();
$name = "foo";
$table = $schema["foo"];
db_create_table($name, $table);
}
Parece funcionar, mas, ao mudar a tabela novamente, falhará se um usuário executar as atualizações e executar dois ou mais hook_update_N () s. Afinal: o primeiro hook_update_N já instalará o banco de dados correto e o segundo hook_update_M () tentará adicionar / alterar / alterar colunas que já estavam atualizadas.
Como você lida com isso?
Respostas:
Então, basta copiar e colar a partir de drupal.org. Você também precisa adicionar a definição de esquema ao hook_schema.
fonte
mymodule_update_7101 () é bom, junto com este gancho, se adicionarmos um hook_install () para executar o mesmo enquanto a instalação do módulo, em vez da definição hook_schema (), também funciona para mim.
fonte
hook_install()
não deve chamar nenhuma implementação hook_update_N (), simplesmente:hook_install()
é para instalar um módulo pela primeira vez, o que significa que não há tabelas para atualizar. Além disso, seu código não funcionaria para atualizações que precisam de um lote para serem executadas.