При использовании нескольких баз данных в Drupal 7, как я могу указать, что таблица должна создаваться в другой базе данных на другом сервере?
По умолчанию при установке модуля Drupal предполагает, что все в hook_schema()
должно быть установлено в базе данных по умолчанию. Есть ли способ указать, что таблица должна создаваться в другой базе данных, или я могу использовать какой-то ручной обход?
Ответы:
Я не думаю, что есть официальный API; в общем нет смысла делать это.
Тем не менее, все, что вам нужно сделать, это дать
hook_schema
другое имя, отличное отyourmodule_schema
(в основном то, что вы хотите, напримерyourmodule_schema_otherdb
), а затем в hook_install () сначала переключить базу данных , а затем повторить то, что делает drupal_install_schema () , за исключением того, что вы вызываете определение своей пользовательской схемы. функции, а затем переключите базу данных обратно на значение по умолчанию.Кроме того, не забудьте реализовать
hook_uninstall()
.Не знаю, почему вы хотите это сделать, хотя. :)
источник
CREATE TABLE
заявлений для этого.Я добился этого благодаря информации, предоставленной Бердиром . Мой код выглядит так:
источник
Drupal 8 версии * .install файл код , предоставленный @ Елин .: Я
Примечание. База данных должна существовать и указываться в файле settings.php.
Вот Гист .
источник
В Settings.php
$db_url=array('default'=>$db_url, 'sec_db'=>$sec_db_url);
In
hook_schema
db_set_active('sec_db')
теперь будет подключаться к вашей другой БД, не уверен, рекомендуется ли это или не пытайтесь на свой страх и риск. И вы можете использовать db_prefix для запроса из этой вторичной БД. Вы можете использовать префикс db в settings.phpисточник
$db_url
,$db_prefix
как глобальные настройки предназначена для Drupal 6. И дот-нотация работает только при использовании другой базы данных на одном сервере MySQL, а не когда (как в моем случае) вы доступ к различным серверам.$db_url
глобальной$db_prefix
переменной, и даже если бы она существовала, это не решило бы проблему.