これは私のプロセスです。私はコマンドを実行し、新しい接続を作成します。次に、その接続をデフォルトとして設定します。これは完全に機能します。Laravel - 接続をオーバーライドしますが、モデルは以前の接続からのデータを返します
また、別の接続を上書きします。ただし、新しい接続を作成してデフォルトに設定するのではなく、既存の接続をコピーするかデータベース情報を置き換えて、その接続を上書きするだけで、デフォルトを1つしか持てないからです。
私はすぐにこの接続を使用するモデルを作成します。私もそれに入り、$this->getConnection()
をダンプして、それが私の新しい設定とconfigsに引っ張られているのを見てください。私の問題は、私が - > all()を実行すると、前回のオーバーライドされた接続から情報が得られることです。私は理由を知りません。ここで
は、私のコードのサンプルです:
public function handle()
{
if (!is_null($this->env = $this->option('env'))) {
(new Dotenv(base_path(), ".env.{$this->env}"))->overload();
}
$this->setClientConnection();
dd(\Override::getModel('User')->changeConnection('webApp')->get()->pluck('login_name', 'users_id'));
}
/**
* Create the database and a temporary connection
*
* @return null
*/
protected function setClientConnection()
{
$clientDb = env('DB_DATABASE');
$userDb = env('DB_APP_DATABASE');
// Create temporary connection
$newConnection = config('database.connections.data');
$newConnection['database'] = $clientDb;
config(['database.connections.' . $clientDb => $newConnection]);
// Set new connection as default
config(['database.default' => $clientDb]);
// Override Webapp database
$newUserConnection = config('database.connections.webApp');
$newUserConnection['database'] = $userDb;
config(['database.connections.webApp' => $newUserConnection]);
}
だけ繰り返すために、新しい接続を作成し、完璧な作品をデフォルトに設定します。新しい接続を作成し、それを使用して既存の接続を上書きするconfig('database.connections.webApp')
は新しい接続情報を返します。 (new App\User)->getConnection()
が適切な設定を返し、データベースが新しいデータベースに設定されます。モデルオブジェクトを見ると、すべてが正しく表示されます。次に、->all()
コールを作成して、オーバーライドされた接続をプルして、古いデータベースからプルします。
P.S. changeConnectionメソッドを追加していくつかのことをテストし、異なる保護属性を調べました。私のダンピングのほとんどは、そこからやってみましたが、新しい接続を使用しているように見えます。
オーバーライドとは何ですか?それはカスタムクラスですか? – Paras
これはモデルクラスを取得し、そのクラスをチェックする私たちの方法です。クライアント固有のオーバーライド –
オーバーライドクラスのコードを投稿する必要があると思います。 – Paras