2016-08-10 10 views
0

2つのデータベース接続を含むようにLaravel 5.2を設定しました。私はコントローラ、モデルなどの中でどのように私がそれぞれに接続できるかを知っています。私が確信している唯一の事は次のとおりです。複数のシステム内でデータベースを共有する

システムAは、私は今、システムB、システムB内で作業しています

は、システムB、システムBのすべてのユーザーに独自のユーザーテーブルを持つシステムAのすべてのユーザーが含まれてする必要があるユーザーテーブルを持っていますシステムAのユーザーの一覧を取得します。

これは、問題のある場所です。システムBの場合、移行を作成しています。システムBは、私の移行があるので、次の操作を行って

Schema::create('projects', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('projectName')->default(''); 
    $table->string('projectValue')->default(''); 
    $table->integer('user_id')->unsigned()->default(0); 
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 
    $table->integer('systemA_user_id')->unsigned()->default(0); 
    $table->foreign('systemA_user_id')->references('id')->on('users')->onDelete('cascade'); 

    $table->engine = 'InnoDB'; 
}); 

を次のようにプロジェクトを作成するために、私は

$table->integer('user_id')->unsigned()->default(0); 
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 
システムBでユーザーにシステムBでプロジェクトをリンクすることができ、このシステムのユーザーのために可能にこのプロジェクトは、システムBで作成されたものの

しかし、それはので、私は、次の

$table->integer('systemA_user_id')->unsigned()->default(0); 
    $table->foreign('systemA_user_id')->references('id')->on('users')->onDelete('cascade'); 

問題追加したシステムA内のユーザーのためですが、それは現在のシステムBのユーザー]タブを参照しているということですル。私が必要とするのは、System A usersテーブルを参照することです。

このようなことは可能でしょうか?私はあなたがそれは悪いデザインのようなにおいが、それをこのワットreferences('connection.tablename.id')

答えて

0

。低レベルのインフラストラクチャーを直接通信するのではなく、システム間で何らかのAPI接続を確立することを検討する必要があります。マイクロサービスの考え方。

0

を行うことができます信じて

おかげ

+0

この場合、最適なオプションは何でしょうか?システムBはシステムAのデータベースから何かを得る必要があります。このためのAPIを作成する必要がありますか? –

+0

データベースが分離されている場合は、論理的にシステムを分離してAPIを介して接続する必要があります。たぶん異なるフレームワークやプログラミング言語を使用しています。 – dogik

+0

しかし、一方で、コードレベルでシステムを分離する時間/欲求/正当な理由がないと思ったり、それがデータベースの従来の分離だった場合は、それらのデータベースを結合して1つのモノリスデータベース。データベース間の接続がたくさんあると思っている場合(読み込み結合、サブクエリなど)、laravelを使用していることを考慮すると(単一のデータベースで作業していても雄弁なことがあります)、データベースを衝突させることをお勧めします可能。 – dogik

関連する問題