Saat menggunakan beberapa basis data di Drupal 7, bagaimana saya bisa menentukan bahwa sebuah tabel akan dibuat di database yang berbeda di server yang berbeda?
Secara default, ketika Anda menginstal modul, Drupal mengasumsikan bahwa semua yang ada di hook_schema()
dalamnya harus diinstal dalam database default. Apakah ada cara untuk menentukan bahwa tabel harus dibuat pada database yang berbeda, atau adakah semacam solusi manual yang dapat saya gunakan?
Jawaban:
Saya tidak berpikir ada API resmi; tidak masuk akal untuk melakukan ini secara umum.
Yang mengatakan, semua yang perlu Anda lakukan adalah memberikan
hook_schema
nama yang berbeda dariyourmodule_schema
(pada dasarnya apa pun yang Anda inginkan, sepertiyourmodule_schema_otherdb
) dan kemudian di hook_install (), pertama-tama beralih database Anda , kemudian meniru apa yang drupal_install_schema () lakukan kecuali Anda memanggil definisi skema kustom Anda berfungsi dan kemudian alihkan database kembali ke default.Juga, ingatlah untuk menerapkan
hook_uninstall()
.Tidak tahu mengapa Anda ingin melakukan ini. :)
sumber
CREATE TABLE
pernyataan untuk ini.Saya telah mencapai ini dengan informasi yang diberikan oleh Berdir . Kode saya terlihat seperti:
sumber
Versi Drupal 8 dari kode file * .install disediakan oleh @ Елин Й .:
Catatan: Basis data harus ada dan ditentukan di settings.php.
Inilah intinya .
sumber
Di Settings.php
$db_url=array('default'=>$db_url, 'sec_db'=>$sec_db_url);
In
hook_schema
db_set_active('sec_db')
sekarang akan terhubung ke DB Anda yang lain, tidak yakin apakah ini direkomendasikan atau tidak mencobanya dengan risiko Anda sendiri. Dan Anda dapat menggunakan db_prefix untuk meminta dari DB sekunder ini. Anda dapat menggunakan awalan db di settings.phpsumber
$db_url
,$db_prefix
sebagai pengaturan global untuk Drupal 6. Dan notasi titik hanya berfungsi ketika menggunakan database berbeda pada server MySQL yang sama, bukan ketika (seperti dalam kasus saya) Anda mengakses server yang berbeda.$db_url
atau$db_prefix
variabel global dalam Drupal 7, dan bahkan jika ada, itu tidak akan menyelesaikan masalah.