Al usar varias bases de datos en Drupal 7, ¿cómo puedo especificar que se cree una tabla en una base de datos diferente en un servidor diferente?
Por defecto, cuando instala un módulo, Drupal asume que todo hook_schema()
debe estar instalado en la base de datos predeterminada. ¿Hay alguna manera de especificar que se debe crear una tabla en una base de datos diferente, o hay algún tipo de solución manual que pueda usar?
Respuestas:
No creo que haya una API oficial; No tiene mucho sentido hacer esto en general.
Dicho esto, todo lo que necesita hacer es darle
hook_schema
un nombre diferente ayourmodule_schema
(básicamente lo que quiera, comoyourmodule_schema_otherdb
) y luego en hook_install (), primero cambie su base de datos , luego replique lo que hace drupal_install_schema () excepto que llama a su definición de esquema personalizada función y luego cambie la base de datos al valor predeterminado.Además, recuerde implementar
hook_uninstall()
.Sin embargo, no tengo idea de por qué querrías hacer esto. :)
fuente
CREATE TABLE
declaraciones para esto.Lo he logrado con la información proporcionada por Berdir . Mi código se ve así:
fuente
Una versión Drupal 8 del código de archivo * .install proporcionado por @ Елин Й .:
Nota: La base de datos debe existir y especificarse en settings.php.
Aquí hay una esencia .
fuente
En Settings.php
$db_url=array('default'=>$db_url, 'sec_db'=>$sec_db_url);
In
hook_schema
db_set_active('sec_db')
ahora se conectará a su otra base de datos, no estoy seguro de si esto se recomienda o no lo intente bajo su propio riesgo. Y puede hacer uso de db_prefix para consultar desde este DB secundario. Puedes usar el prefijo db en settings.phpfuente
$db_url
,$db_prefix
como una configuración global son para Drupal 6. Y el punto-notación sólo funciona cuando se utiliza una base de datos diferente en el mismo servidor MySQL, no cuando (como en mi caso) que está accediendo diferentes servidores.$db_url
una$db_prefix
variable global o ninguna en Drupal 7, e incluso si la hubiera, no resolvería el problema.