2016-04-11 13 views
1

GridAdplaceを使用してデータを表示しています。私は同じ方法で、しかし外部のデータベースからモデルを管理したい。Silverstripeの外部データベースからのデータを含むグリッドフィールド

private static $managed_models = array(
    'exampleModel' 
); 

iは関数内のコードをfollwingているこの第二のデータベースにデータを挿入するには:私のモデル管理者で

私が管理する(のDataObjectを)モデルを呼び出すコードを持っている

global $databaseConfig, $databaseConfig2; 
DB::connect($databaseConfig2); //connect to second database 
//do somee stuff 
DB::connect($databaseConfig); //return to default database 

ただ、テストのために、私は、データオブジェクトexampleModelを使用して、いくつかのフィールドを定義しました。

このように、gridfieldは私のModelAdminの中でこのモデルからの結果を示しているので、それが働いているが、どのように私はこのgridfieldで私の第二のデータベースからの結果を表示することができます。出来ますか ?

+1

https://github.com/nyeholt/silverstripe-external-content/ <:-)

幸運 - 私はこれを試していませんでしたが、それはカスタムニーズのために作られたされたようですね。それとも、データベースの同期装置をセットアップするのが最善だろうと思います。 – Barry

答えて

1

これは興味深いシナリオ、SilverStripeのデフォルト設定で箱から出しができないものです。ほとんどのCMSシステムの場合と同様に、いつでも1つのDB接続が開いていることに注意してください。これは、ORMがモデルで使用している接続です。

しかし、私は原則としてSilverStripeでこれを行うことができなかったのですが、満足できる結果を出すには、モデルの背後に書かれている必要があります。どのソリューションも、それぞれのデータベース上でモデル(すべての標準GridFieldアクション)を編集、削除したいということを前提にしています。

頭に浮かぶ唯一の解決策は、SilverStripeの組み込みの側面システムを使用することです - しかし、私はそれを自分自身を使用したことがないのですることを認めざるを得ません。 Aspect Oriented Programmingは、標準のビジネスロジックとしてのOOプログラミングとは異なりますが、オブジェクト指向のパラダイムでも使用できます。開発者は、クラス・ロジック全体を「水平に」カットし、あらかじめ定義されたシナリオでは異なるクラスで異なるロジックを利用することができます。

フックのように少し考えてください。

SilverStripeのアスペクトシステムとそれが使用する例(https://docs.silverstripe.org/en/3.2/developer_guides/extending/aspects/を参照)を見ると、あなたの使用例を変更できると思います。この例では、DBの読み込みまたは書き込みに基づいて、ORMが別のDB接続を使用してDB接続を行う方法を説明しています。シナリオに似ていますが、接続のアービターである「読み込み」と「書き込み」ではなく、おそらく特定のインターフェースを実装することによって、どのモデルになるでしょうか。

+0

CMSで別々の読み書き可能な接続を使用するのは比較的一般的でしょうか?おそらく高負荷用に構築されたものだけでしょう。そこにある側面へのいい言及 - 良い読書。 –

+1

@RobbieAverillはそう考えていたでしょう。 SilverStripeの素晴らしいところは、常に猫をスキニングの少なくとも一つの方法があるということです - それは開発者のCMSです: - ボックスのうち 私は、彼らがネイティブソリューションとこれに対する答えを求めていたOPから推測 はノーです。しかし、OPはその後、これも動作する可能性(SQLSelect' '経由)生SQLを使用するようにクラスを変更したい場合:http://www.silverstripe.org/community/forums/customising-the-cms/show/13692 しかし、 > 1 DBを持つ 'DataObject :: get()'のような標準的なORM呼び出しを含むすべてのことを "うまく動作させる"ためには、Aspectsのようなものが動作する可能性があります。 – theruss

関連する問題