2016-08-30 1 views
0

私はLaravel 5.1で構築されたマルチテナントアプリケーションを持っています。ユーザー、ロール、権限、およびジョブと失敗したジョブを格納するための1つのメイン・データベース接続を使用します。さらに、すべてのユーザーには独自のデータベースがあります。Laravelのキューイングマルチテナントアプリケーション

私がメールを送信するためのジョブクラスを使用し、それが実行されると、次の例外が発生します。

[PDOException] SQLSTATE [3D000]:無効なカタログ名:1046いいえデータベースは

を選択していません

このクラスは、2つのdb接続(メイン接続と現在のユーザーに関連付けられている接続)のテーブルを使用します。

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

答えて

0

これは簡単でした。興味のある人は、2番目の接続でデータベースを設定することを全く忘れていました。

実際には、認証されたユーザーに応じて、2番目のdb接続のdatabaseフィールドが動的に入力されます。問題を解決

Config::set('database.connections.second_connection.database', 'user_' . $user_id); 
// $user_id is in fact auth()->user()->id, passed as parameter 

:だから、ジョブ・クラスが実行されるたびに、databaseフィールドの初期化があるはずです。

+0

こんにちは@icemanblas、私はテナントに応じてデータベースを切り替えるしようとしている同様の問題に遭遇しました。私は似たような解決策を実装しましたが、データベース接続が短い間隔で切り替わらないということは、テナント1が接続されたDBで実行されたジョブを数秒で持ち、別のテナントがデータベース接続が同じキューにジョブをプッシュするそれでもデフォルトの接続を設定しても以前のテナントのものです。類似の経験ですか? – BlackBurn027

+0

@ BlackBurn027私はそのプロジェクトをもう少し前に断念しましたが、覚えている限り、このような問題はなく、さまざまなフローとシナリオをテストしました。 – icemanblas

+1

ああ、その問題は、実際に私はDB ::パージ()を使用してその問題を解決しました。 :)それは今完全にスムーズに動作します。とにかくありがとう:D – BlackBurn027