Hay mucha discusión aquí y en otros lugares sobre el uso de bases de datos externas en Drupal. Lo que he descubierto de eso es:
- La mejor manera de trabajar con datos en una tabla de base de datos es usar el módulo Vistas. Lo instalé y comencé a usarlo, y descubrí que es excelente para trabajar con una tabla que agregué a la base de datos del sitio.
- La forma fácil de hacer que Vistas funcione con una tabla que no fue creada por Drupal es con el módulo de Datos. Este módulo trata cualquier tabla en la base de datos del sitio que Drupal no esté usando como una "tabla huérfana" y permite que sea "adoptada" con solo hacer clic en un botón.
- El módulo "Asistente de tabla" aparentemente proporciona una forma de hacerlo con tablas que no están en la base de datos del sitio. Pero ese módulo no está disponible para Drupal 7.
- El archivo "settings.php", en la sección "Configuración de la base de datos", tiene documentación detallada sobre cómo definir bases de datos adicionales con las que el sitio puede trabajar. Pero cuando una base de datos se define de esa manera, sus tablas no aparecen en la lista de tablas huérfanas en el módulo de datos.
El cambio que he realizado en la definición de la base de datos en el archivo "settings.php" de uno de mis sitios es:
$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' => '',
), ), );
Tengo una tabla que quiero usar en más de un sitio en mi instalación multisitio. Esto significa que necesito tener la tabla en una base de datos que sea accesible para cada sitio. Según la lectura que he hecho, mis opciones para hacerlo son:
- Lo mejor, si es posible: descubra que hay una manera de hacer que el módulo de datos reconozca las tablas en la base de datos adicional definida en "settings.php", para que pueda adoptarlas.
- Use prefijos de tabla para permitir que todos los sitios usen una base de datos.
- El módulo " Informes de Forena " parecía hacer exactamente lo que necesitaba, pero cuando lo instalé, no pude hacerlo funcionar. Presenté tema 2475645 y no puede hacer mucho más allá a menos que haya una solución para ese problema.
- Escribir mi propio módulo para dar acceso a Vistas a la base de datos adicional definida en "settings.php".
- Instale Drupal 6 con Table Wizard y utilícelo para obtener Vistas para ver mi tabla externa, y luego de alguna manera tome el resultado de eso y póngalo en Drupal 7. (Esto se ha sugerido en algunas publicaciones).
- Siga el procedimiento en https://drupal.stackexchange.com/a/3321/45991 , que comienza con la instalación de un parche y parece que también requiere la creación de mi propio módulo.
- También he mirado los módulos Feeds, Feeds SQL, Views XML Backend y Migrate, pero ninguno de ellos dice que pueden conectar un db externo a Views. ¿Me estoy perdiendo de algo? ¿Es uno de ellos la solución correcta?
La opción 2 no es práctica porque daría como resultado una gran base de datos con cientos de tablas que serían muy difíciles de administrar. He estado haciendo grandes progresos para comenzar a utilizar Drupal, pero no me siento a la altura de la tarea de 4, 5 o 6. ¿Existe alguna posibilidad de que algo como la opción 1 funcione? ¿O hay alguna otra forma de hacer que las Vistas funcionen con una tabla fuera de la base de datos del sitio sin poder escribir mi propio módulo?
Dos detalles adicionales: la primera tabla con la que necesito trabajar es bastante grande, más de 6,000 filas y aproximadamente 20 columnas. No hay intención de dar a los visitantes del sitio acceso a la base de datos, excepto por la información extraída del contenido de la página.
Gracias por tu ayuda.
He hecho esto con éxito de dos maneras diferentes:
Utilice una vista SQL para crear una tabla virtual en
db_local
que se refiere a la tabla correspondiente endb__extra
. La consulta para crear que se vería así:USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;
Luego puede referirse a esta Vista SQL como si fuera una tabla nativa en su base de datos Drupal, y ni siquiera necesita agregar la base de datos externa en settings.php. Tenga en cuenta que esto podría no ser compatible con el módulo de datos (consulte https://www.drupal.org/node/1973806 ), pero debería poder describir la vista SQL al módulo de vistas de Drupal mediante la implementación
hook_views_data()
y dejar de usar el módulo de datos .Aquí hay otra posibilidad: use prefijos de tabla selectivos para engañar a Drupal para que reescriba {some_table} a db__extra.some_table. Esto no es lo mismo que prefijar sus tablas de Drupal.
Su
$databases
configuración se vería así:$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );
Nuevamente, no estoy seguro de si esto es compatible con el módulo de datos, ya que no lo uso. Pero debería funcionar con Vistas si se implementa usted
hook_views_data()
mismo.fuente