Laravel では、belongsToMany 関係は、ピボット テーブルがターゲット モデルと同じデータベースに存在することを前提としています。ただし、この仮定は、複数のデータベースにわたるモデルを操作する場合に問題を引き起こす可能性があります。この記事では、この問題に効果的に対処する方法について説明します。
モデル A と B が 2 つの別々のデータベースに存在し、ピボット テーブル a_bs が 2 つのデータベースにあるとします。モデル A と同じデータベースです。A で次のリレーションシップ定義を使用すると、エラーが発生します:
<code class="php">public function bs() { return $this->belongsToMany('B', 'a_bs', 'a_id', 'b_id'); }</code>
この問題を解決するには、明示的に指定する必要があります。ピボット テーブルが存在するデータベース。これは次の変更で実現できます:
<code class="php">public function bs() { $database = $this->getConnection()->getDatabaseName(); return $this->belongsToMany('B', "$database.a_bs", 'a_id', 'b_id'); }</code>
データベース名を動的に取得することで、Laravel は A モデルと同じデータベース内でピボット テーブルを探すように指示されます。
SQLite データベースを使用している場合は、追加の手順が必要になる場合があります:
この記事で説明されている手法に従うことで、Laravel の複数のデータベース間で効果的なbelongsToMany関係を確立できます。スムーズな操作を確保するために、SQLite の制限など、データベース固有の潜在的な考慮事項を必ず考慮してください。
以上がLaravelで複数のデータベース間で「belongsToMany」関係を確立する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。