外部データベースをビューで利用できるようにする方法は?


8

Drupalでの外部データベースの使用については、ここや他の場所で多くの議論があります。それから私が理解したことは:

  • データベーステーブルのデータを操作する最良の方法は、Viewsモジュールを使用することです。これをインストールして使い始めたところ、サイトのデータベースに追加したテーブルを操作するのに最適です。
  • Drupalで作成されていないテーブルをビューで機能させる簡単な方法は、Dataモジュールを使用することです。このモジュールは、Drupalで使用されていないサイトデータベース内のテーブルを「孤立したテーブル」として扱い、ボタンをクリックするだけで「採用」できるようにします。
  • モジュール「テーブルウィザード」は明らかに、サイトのデータベースにないテーブルでそれを行う方法を提供します。ただし、そのモジュールはDrupal 7では使用できません。
  • 「データベース設定」セクションの「settings.php」ファイルには、サイトで使用できる追加のデータベースを定義する方法に関する詳細なドキュメントがあります。しかし、データベースがそのように定義されている場合、そのテーブルはDataモジュールの孤立したテーブルのリストに表示されません。

私のサイトの1つの「settings.php」ファイルでデータベース定義に加えた変更は次のとおりです。

$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' => '', ), ), );

マルチサイトインストールの複数のサイトで使用したいテーブルがあります。つまり、各サイトからアクセスできるデータベースにテーブルが必要です。私が行った読書によると、それを行うための私のオプションは次のとおりです。

  1. 最善の方法:可能であれば、「settings.php」で定義された追加のデータベース内のテーブルをDataモジュールに認識させ、それらを採用できるようにする方法があることを確認してください。
  2. テーブルプレフィックスを使用して、すべてのサイトが1つのデータベースを使用できるようにします。
  3. モジュール“ Forena Reports ”は、私が必要としていることを正確に実行しているように見えましたが、インストールすると機能しませんでした。私は問題2475645を送信しましたが、その問題の修正がない限り、それ以上はできません。
  4. 「settings.php」で定義された追加のデータベースへのアクセスをビューに与えるために、独自のモジュールを作成します。
  5. テーブルウィザードでDrupal 6をインストールし、それを使用してビューに私の外部テーブルを表示させ、どういうわけかその結果を取得してDrupal 7に入れます(これはいくつかの投稿で提案されています)。
  6. https://drupal.stackexchange.com/a/3321/45991の手順に従います。これは、パッチのインストールから始まり、独自のモジュールを作成する必要があるようです。
  7. Feeds、Feed SQL、Views XML Backend、Migrateの各モジュールも確認しましたが、外部dbをViewsに接続できるとは誰も言っていません。何か不足していますか?それらの1つは正しい解決策ですか?

オプション2は、管理が非常に困難な数百のテーブルを含む巨大なデータベースになるため、実用的ではありません。私はDrupalの使用を開始するのに大きな進歩を遂げていますが、4、5、または6のタスクに満足できません。オプション1のようなものが機能する可能性はありますか?または、独自のモジュールを記述せずに、ビューがサイトデータベースの外部のテーブルを操作できるようにする他の方法はありますか?

さらに2つの詳細:最初に使用する必要があるテーブルはかなり大きく、6,000行を超え、約20列です。サイトの訪問者にデータベースへのアクセスを許可するつもりはありません。

ご協力いただきありがとうございます。

回答:


2

私が思うにForenaのモジュールが実際に行い、正確に何が必要。あなたのセットアップの問題は、私が思うサポートリクエストにすぎず、「修正」を必要とするものではありません。それを解決したら、ビューの統合を使用するかどうかを選択することもできます。

あなたが作成したForenaの問題は非常によく文書化されています(すばらしい!)。ただし、付与されたアクセス許可については何も記載されていません(必要なアクセス許可の一部が不足している可能性があると思います)。だから、これはそれに取り組む試みです:

  • 許可した(必要な)Forena関連のアクセス許可のうち、簡単に説明できるものはありますか?

  • 必要なForenaの権限については、Forenaに付属セットアップガイドで説明しています。参考までに:ここにその一部を引用します。

    Forenaでは、標準のDrupal管理機能を使用してロールにアクセス許可を付与することにより、関連する承認の報告に関して多くの細分性が可能になります。許可できるForena関連のDrupal権限のリストは、最初は少し圧倒されるかもしれません。定義されたデータソースごとに3つのエントリがあり、vanilla Forenaにはすでに3つのデータソースが付属しています。

    このガイドを自分のサイトで取得するには、/ reports / help.setupに移動します

「データ」にアクセスするためのこれらのアクセス許可は、元々保留されています。これは仕様によるものです。Forenaは、Forenaを介したデータへのアクセスの許可に関連するあらゆることに非常に敏感だからです。実行したくないのは、Forenaをインストールして構成するだけで(管理者権限なし)、セキュリティで保護されたデータにアクセスするための回避策として使用できることです。

また、データソース全体のレベルでの権限とは別に、特定のデータブロック(=カスタムSQLクエリ)に必要な権限をさらに絞り込むオプションがあることに注意してください。そのためには、SQLステートメント内で必要な(Drupal)権限を指定するだけです(構文の詳細はForenaガイドに含まれています)。この典型的な使用例は、機密データが含まれる列へのアクセスを保護することです。

開示:私はこのモジュールの共同メンテナーです。これ
がサイトの自己宣伝に関するポリシーに違反しないことを願っています。


これありがとう。セットアップを最初に実行したときに、誰にも付与されていない5つのアクセス許可があることに気付きませんでした。私はそれらを管理者(つまり、私)に許可しました。セットアップドキュメントでは、これらのアクセス許可が元々保留されている理由や、それらを管理者に付与しない理由があるかどうかは記載されていません。しかし、私はそれらのデータソースを持っているので、これでその問題は解決しました。私が提出した問題ではなく、ここで回答した理由はありますか?
NewSites 2015

進行状況を読むのに最適です!それはどういうわけか私の答えの「反対票」を補います...参考:私はまた、問題キューを介して応答しました。「これで問題は解決しました」ということですが、Forenaが実際に質問に対する「the」の回答と見なすということですか(まだOPの箇条書き3にはありませんでした)。参考までに、私はここで私の回答を更新して、「これらのアクセス許可が元々源泉徴収される理由」を簡潔に説明するようにします。これは良い追加の質問です!
Pierre.Vriens 2015

あなたの答えに反対票を投じたのは私ではありませんでした。私はあなたの回答を<u> the </ u>の回答として受け入れ、それを賛成投票しました(残念ながらそれはゼロに戻るだけです)。
NewSites 2015

ええと、@ NewSitesが反対票を投じているとは想定していませんでした。実際、反対票とともに生きることを学びました。私は個人的には一般的に投票を好まないので、何も説明するコメントがないコメントは無視します。しかしもちろん、「賛成」と「受け入れ」は大歓迎です。そしてもちろん、今、Forenaを発見したように見える別のDrupalユーザーがいることを知っているのです。必要に応じて(サポート?)問題を提出してください(職場でのサポートも参照してください...)。
Pierre.Vriens 2015

2

私はこれをいくつかの異なる方法で成功させました:

SQLビューを使用しdb_localて、の対応するテーブルを参照する仮想テーブルを作成しdb__extraます。作成するクエリは次のようになります。

USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;

その後、このSQLビューをDrupalデータベースのネイティブテーブルであるかのように参照でき、settings.phpで外部データベースを追加する必要すらありません。これはDataモジュール(https://www.drupal.org/node/1973806を参照)と互換性がない可能性がありますがhook_views_data()、を実装してSQLビューをDrupal Viewsモジュールに記述し、Dataモジュールの使用を停止できることに注意してください

別の可能性があります。選択的なテーブルプレフィックスを使用して、Drupalをだまして{some_table}をdb__extra.some_tableに書き換えます。これは、Drupalテーブルの接頭辞と同じではありません。

あなたの$databases設定は次のようになります。

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );

繰り返しますが、これがDataモジュールと互換性があるかどうかはわかりません。使用しないからです。しかし、あなたがあなたhook_views_data()自身を実装するなら、それはビューで動作するはずです。


どちらのメソッドでも、<code> hook_views_data()</ code>を実装する必要があると言っています。モジュールを書く必要はありませんか?いずれにせよ、私は2番目の方法でデータベース定義を試しました。「db_extra」のテーブルがDataモジュールの孤立したテーブルのリストに表示されることはありませんでした。最初の方法では、提案したクエリをどこに配置しますか(カスタムモジュールでない場合)?
NewSites 2015

SQLビューを作成する場合は、MySQLで直接CREATE VIEWクエリを実行する必要があります。再実行する必要はありません。
Les Lim

すみません、それでもわかりません。このクエリをどこで実行しますか?phpMyAdmin?ビューで使用できるものはありますか?私はDrupal.orgで「SQLビュー」を検索し、drupal.org/project/sql_viewsを取得しました。これには製品のダウンロードがなく、drupal.org/node/2458947のドキュメントにはフックを実装する必要があると書かれています(これは、モジュール)を使用して、SQLビューについてビューモジュールに通知します。だから、あなたが提案していることはモジュールを書く必要があるように思えます(私はまだ準備ができていないようです)。
NewSites 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.