Ao usar vários bancos de dados no Drupal 7, como posso especificar que uma tabela seja criada em um banco de dados diferente em um servidor diferente?
Por padrão, quando você instala um módulo, o Drupal assume que tudo hook_schema()
deve estar instalado no banco de dados padrão. Existe uma maneira de especificar que uma tabela deve ser criada em um banco de dados diferente ou há algum tipo de solução manual que eu possa usar?
Respostas:
Eu não acho que exista uma API oficial; não faz muito sentido fazer isso em geral.
Dito isso, tudo o que você precisa fazer é dar
hook_schema
um nome diferente do queyourmodule_schema
(basicamente o que você quiser, comoyourmodule_schema_otherdb
) e, em hook_install (), primeiro alterne seu banco de dados e , em seguida, replique o que drupal_install_schema () faz, exceto que você chama sua definição de esquema personalizada função e, em seguida, alterne o banco de dados para o padrão.Além disso, lembre-se de implementar
hook_uninstall()
.Mas não faço ideia por que você faria isso. :)
fonte
CREATE TABLE
declarações para isso.Consegui isso com as informações fornecidas por Berdir . Meu código se parece com:
fonte
UMA versão do Drupal 8 do código do arquivo * .install fornecida por @ Елин Й .:
Nota: O banco de dados deve existir e ser especificado em settings.php.
Aqui está uma essência .
fonte
Em Settings.php, o
$db_url=array('default'=>$db_url, 'sec_db'=>$sec_db_url);
In
hook_schema
db_set_active('sec_db')
agora se conectará ao seu outro banco de dados, não tenho certeza se isso é recomendado ou não tente por sua conta e risco. E você pode usar o db_prefix para consultar esse banco de dados secundário. Você pode usar o prefixo db em settings.phpfonte
$db_url
,$db_prefix
como uma configuração global são para Drupal 6. E a notação de ponto só funciona quando se utiliza um banco de dados diferente no mesmo servidor MySQL, não quando (como no meu caso) que você está acessando servidores diferentes.$db_url
ou existe uma$db_prefix
variável global no Drupal 7 e, mesmo que houvesse, isso não resolveria o problema.