Há muita discussão aqui e em outros lugares sobre o uso de bancos de dados externos no Drupal. O que eu descobri disso é:
- A melhor maneira de trabalhar com dados em uma tabela de banco de dados é usar o módulo Views. Instalei isso e comecei a usá-lo e achei ótimo trabalhar com uma tabela que adicionei ao banco de dados do site.
- A maneira mais fácil de fazer com que o Views funcione com uma tabela que não foi criada pelo Drupal é com o módulo Dados. Este módulo trata qualquer tabela no banco de dados do site que não seja usada pelo Drupal como uma "tabela órfã" e permite que ela seja "adotada" com o clique de um botão.
- O módulo "Assistente de tabela" aparentemente fornece uma maneira de fazer isso com tabelas que não estão no banco de dados do site. Mas esse módulo não está disponível para o Drupal 7.
- O arquivo "settings.php", na seção "Configurações do banco de dados", possui documentação detalhada sobre como definir bancos de dados adicionais com os quais o site pode trabalhar. Mas quando um banco de dados é definido dessa maneira, suas tabelas não aparecem na lista de tabelas órfãs no módulo Dados.
A alteração que fiz na definição do banco de dados no arquivo "settings.php" de um dos meus sites é:
$databases = array (
'default' => array ('default' => array (
'database' => 'db_local',
'username' => 'db_local',
'password' => '_________',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
), ),
'extra' => array ('default' => array (
'database' => 'db__extra',
'username' => 'db_admin',
'password' => '_________,
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
), ), );
Eu tenho uma tabela que quero usar em mais de um site na minha instalação de vários sites. Isso significa que eu preciso ter a tabela em um banco de dados acessível a cada site. De acordo com a leitura que fiz, minhas opções para fazer isso são:
- Melhor, se possível: Descubra que existe uma maneira de fazer com que o módulo Data reconheça tabelas no banco de dados adicional definido em "settings.php", para que possa adotá-las.
- Use prefixos de tabela para permitir que todos os sites usem um banco de dados.
- O módulo “ Forena Reports ” parecia fazer exatamente o que eu precisava, mas quando o instalei, não consegui fazê-lo funcionar. Enviei a edição 2475645 e não posso fazer muito mais a menos que haja uma correção para esse problema.
- Escreva meu próprio módulo para dar ao Views acesso ao banco de dados adicional definido em "settings.php".
- Instale o Drupal 6 com o Assistente de tabela e use-o para obter Views para ver minha tabela externa e, de alguma forma, pegue o resultado disso e coloque-o no Drupal 7. (Isso foi sugerido em algumas postagens).
- Siga o procedimento em https://drupal.stackexchange.com/a/3321/45991 , que começa com a instalação de um patch e parece exigir também a criação do meu próprio módulo.
- Também observei os módulos Feeds, Feeds SQL, Views XML Backend e Migrate, mas nenhum deles diz que pode conectar um banco de dados externo ao Views. Estou esquecendo de algo? Um deles é a solução certa?
A opção 2 não é prática porque resultaria em um enorme banco de dados com centenas de tabelas que seriam muito difíceis de gerenciar. Eu tenho feito grandes progressos ao iniciar o Drupal, mas não sinto a tarefa de 4, 5 ou 6. Existe alguma possibilidade de algo como a opção 1 funcionar? Ou existe outra maneira de fazer com que o Views funcione com uma tabela fora do banco de dados do site sem poder escrever meu próprio módulo?
Dois detalhes adicionais: A primeira tabela com a qual preciso trabalhar é bastante grande, com mais de 6.000 linhas e cerca de 20 colunas. Não há intenção de dar aos visitantes acesso ao site no banco de dados, exceto pelas informações extraídas dele para o conteúdo da página.
Obrigado pela ajuda.
Fiz isso com sucesso de várias maneiras diferentes:
Use uma exibição SQL para criar uma tabela virtual no
db_local
que se refere à tabela correspondentedb__extra
. A consulta a ser criada seria algo assim:USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;
Você pode então se referir a essa tela SQL como se fosse uma tabela nativa no banco de dados Drupal, e nem precisa adicionar o banco de dados externo em settings.php. Observe que isso pode não ser compatível com o módulo Data (consulte https://www.drupal.org/node/1973806 ), mas você deve ser capaz de descrever o SQL View para o módulo Drupal Views implementando
hook_views_data()
e parando de usar o módulo Data .Aqui está outra possibilidade: use prefixos de tabela seletiva para induzir o Drupal a reescrever {some_table} em db__extra.some_table. Isso não é o mesmo que prefixar suas tabelas Drupal.
Sua
$databases
configuração seria assim:$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );
Mais uma vez, não tenho certeza se isso é compatível com o módulo Dados, pois não o uso. Mas deve funcionar com o Views se você se implementar
hook_views_data()
.fonte