2016-08-09 7 views
0

これは愚かな質問である場合はお詫び申し上げます。これはおそらく標準的な方法ではありませんが、私はLaravel 5.2でMySQLのデータとMS-SQLデータベースのデータを結合できるようにしています。私はそれのような何かをすることは可能ですかはわからないLaravelのMySQLにMS-SQLを参加させることは可能ですか

...

\DB::connection('sqlsrv')->table('mstable') 
    ->leftJoin(\DB::connection('mysql')->table('mysqltable'), 
       'mysqltable.shared_id', 
       '=', 
       'mstable.shared_id'); 

私の思考はLaravelはPHPオブジェクトに早期に十分なクエリを変換した場合、それのことができるようにすべきであるということです。それ以外の場合は、2つのデータベースタイプを一緒に使用できるという代償がありますか?

+1

いや、それはないです。ただし、リンクされたデータベースを作成することで、MS-SQL自体でこれを実行できます。パフォーマンスと機能は制限されます –

+0

いいえ、このような異なるデータベースサーバーに参加することはできません。 – ceejayoz

答えて

1

私は本当に参加できないと確信しています。あなたができることは、異なるデータベース上の関係を使用することです。状況に応じて、これは適用可能な回避策かもしれません。私は現在、このアプローチを使って異なるデータベースのエンティティを照会し、それらを「チャンク」して、数千のエンティティだけをメモリに保持します。 Laravel/Eloquentがチャンクごとに2つのリクエストをトリガするように、私は熱心な読み込みを使用しているので、それはすべてのエンティティを繰り返し処理するための効率的な方法です:1つはプライマリモデルを取得し、2つ目は関係を取得する(デフォルトではリレーションのテーブルのINステートメントによって、プライマリモデルテーブルから取得されたキーを使用して)。これを設定するには

「シンプル」な方法は、このような雄弁モデルの保護$接続プロパティを埋めるためにある:

class Foo extends Model{ 

    protected $connection = "mysql"; 

    public function bar(){ 
    return $this->hasOne(Bar::class); 
    } 
} 

class Bar extends Model{ 

    protected $connection = "ms-sql"; 
} 

Foo::with("bar")->get(); 
関連する問題