私はlaravelフレームワークを使用するためにいくつかのデータベーススキーマを定義しようとしています。サッカーの試合をモデル化したい。私がやりたかった最初のステップは、実体関連図を定義することですが、これ(これは非常に些細なことだと思いました)がいくつかの面で混乱していることがわかりました。
まず、明らかなアプローチは、試合は2つのチームに関連しており、チームは任意の数の試合に関連していると言うことです。したがって、「多対多」の関係になります。
しかし、多対多の関係の実装は、両方のエンティティを関連付けるために2つのテーブルと1つの中間テーブルを持つことです。マッチには常に2つのチームがあり、Teamsテーブルへの外部キーを持つ2つの列(local_idとvisitant_id)があるだけで十分であることがわかっている場合、これは多すぎると思います。さらに、私はできることをしたい:
Match::find(1)->local() or Match::find(1)->visitant();
それで、これを考えて、私は「1対多」の関係を実装していますが、これには別の問題があります。チームがプレイしたすべての試合を取得するには、次のようにします。
Team::find(1)->matches();
ただし、eloquentでmatches()メソッドを定義するときに指定できるキー列は1つだけなので、これを行うことはできません(デフォルトでは、team_idになりますが、visitant_idとlocal_idである必要があります)。