Tutaj i w innych miejscach jest wiele dyskusji na temat korzystania z zewnętrznych baz danych w Drupal. Z tego zorientowałem się:
- Najlepszym sposobem pracy z danymi w tabeli bazy danych jest użycie modułu Widoki. Zainstalowałem to i zacząłem go używać i stwierdziłem, że świetnie nadaje się do pracy z tabelą dodaną do bazy danych witryny.
- Najłatwiejszym sposobem, aby Widoki działały z tabelą, która nie została utworzona przez Drupal, jest moduł danych. Ten moduł traktuje dowolną tabelę w bazie danych witryny, która nie jest używana przez Drupal, jako „tablicę osieroconą” i umożliwia jej „adaptację” jednym kliknięciem.
- Moduł „Kreator tabel” najwyraźniej zapewnia to w przypadku tabel, które nie znajdują się w bazie danych witryny. Ale ten moduł nie jest dostępny dla Drupala 7.
- Plik „settings.php” w sekcji „Ustawienia bazy danych” zawiera szczegółową dokumentację dotyczącą definiowania dodatkowych baz danych, z którymi witryna może współpracować. Ale gdy baza danych jest zdefiniowana w ten sposób, jej tabele nie pojawiają się na liście tabel osieroconych w module Data.
Zmiana, którą wprowadziłem w definicji bazy danych w pliku „settings.php” jednej z moich witryn to:
$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' => '',
), ), );
Mam tabelę, której chcę używać w więcej niż jednej witrynie w mojej instalacji obejmującej wiele witryn. Oznacza to, że muszę mieć tabelę w bazie danych, która jest dostępna dla każdej witryny. Według lektury, którą zrobiłem, moje opcje to:
- Najlepiej, jeśli to możliwe: dowiedz się, że istnieje sposób, aby moduł Data rozpoznał tabele w dodatkowej bazie danych zdefiniowanej w pliku „settings.php”, aby mógł je przyjąć.
- Użyj prefiksów tabeli, aby umożliwić wszystkim stronom korzystanie z jednej bazy danych.
- Moduł „ Raporty Forena ” wydawał się robić dokładnie to, czego potrzebuję, ale kiedy go zainstalowałem, nie mogłem go uruchomić. I złożony problem 2475645 i nie można zrobić dużo więcej tam, chyba że istnieje poprawka dla tego problemu.
- Napisz własny moduł, aby dać widokom dostęp do dodatkowej bazy danych zdefiniowanej w „settings.php”.
- Zainstaluj Drupal 6 za pomocą Kreatora tabel i użyj go, aby uzyskać Widoki, aby zobaczyć moją tabelę zewnętrzną, a następnie jakoś weź wynik tego i umieść go w Drupal 7. (Zasugerowano to w niektórych postach).
- Postępuj zgodnie z procedurą opisaną w https://drupal.stackexchange.com/a/3321/45991 , która rozpoczyna się od zainstalowania poprawki i wydaje się, że wymaga również utworzenia własnego modułu.
- Patrzyłem również na moduły Kanały, Kanały SQL, Widoki XML Backend i Migracja, ale żaden z nich nie powiedział, że mogą podłączyć zewnętrzną bazę danych do Widoki. Czy coś brakuje? Czy jedno z nich jest właściwym rozwiązaniem?
Opcja 2 nie jest praktyczna, ponieważ spowodowałaby powstanie ogromnej bazy danych z setkami tabel, które byłyby bardzo trudne w zarządzaniu. Robię duże postępy w rozpoczynaniu pracy z Drupalem, ale nie czuję się dobrze z zadaniem 4, 5 lub 6. Czy jest jakaś możliwość, żeby działała opcja 1? Czy jest jakiś inny sposób, aby Widoki działały z tabelą poza bazą danych witryny bez możliwości napisania własnego modułu?
Dwa dodatkowe szczegóły: Pierwszy stół, z którym muszę pracować, jest dość duży, ponad 6000 wierszy i około 20 kolumn. Nie ma zamiaru udostępniać odwiedzającym witryny dostępu do bazy danych, z wyjątkiem informacji z niej pochodzących dotyczących zawartości strony.
Dzięki za pomoc.
Zrobiłem to z powodzeniem na kilka różnych sposobów:
Użyj widoku SQL, aby utworzyć wirtualną tabelę,
db_local
która odwołuje się do odpowiedniej tabeli wdb__extra
. Zapytanie do utworzenia, które wyglądałoby mniej więcej tak:USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;
Następnie możesz odwołać się do tego widoku SQL, tak jakby był on rodzimą tabelą w bazie danych Drupal, i nie musisz wcale dodawać zewnętrznej bazy danych w pliku settings.php. Pamiętaj, że może to nie być zgodne z modułem danych (patrz https://www.drupal.org/node/1973806 ), ale powinieneś być w stanie opisać widok SQL do modułu widoków Drupal poprzez wdrożenie
hook_views_data()
i przestać używać modułu danych .Oto kolejna możliwość: użyj selektywnych prefiksów tabeli, aby nakłonić Drupala do przepisania {some_table} do db__extra.some_table. To nie to samo, co prefiksowanie tabel Drupala.
Twoje
$databases
ustawienie wygląda następująco:$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );
Ponownie nie jestem pewien, czy jest to zgodne z modułem danych, ponieważ go nie używam. Ale jeśli implementujesz
hook_views_data()
siebie, powinno to działać z widokami.źródło