0

アプリで 2 つのチームと対戦したいです。現在、単純な hasMany/belongsToMany 関係でこれを実装しています。

テーブル: チーム、マッチ、match_team (match_id、team_id)

チームモデル

...
public function matches()
{
  return $this->belongsToMany('App\Match');
}

マッチモデル

...
public function teams()
{
  return $this->belongsToMany('App\Team');
}

もちろん、ピボット テーブルの match_team には、試合ごとに 2 つの行があります。

match_id   team_id   
       1      1000
       1      2000
       2      3000
       2      4000

Blade テンプレート エンジンを使用すると、ホーム チームに次のようにリクエストできます。

{{$match->teams[0]->name}}

しかし、私はより具体的にしたいので、次のようなテーブルが必要です:

match_id   host_team   guest_team
       1        1000         2000
       2        3000         4000

しかし、それらの関係を設定する方法がよくわかりません...

それについて何か考え/アイデアはありますか?=)

4

2 に答える 2

1

ここに私が提案するものがあります: 試合には、ホストチームとゲストチームの 2 つのチームしか参加できません。ここでの秘訣は、外部キーの列名を指定することです (ピボット テーブルは必要ありません) 幸い、Laravel にはこれを行う簡単な方法があります。したがって、Match モデルに次の関係を追加する必要があります。

public function hostTeam(){
    return $this->belongsTo('App\Team', 'host_team_id');
}

public function guestTeam(){
    return $this->belongsTo('App\Team', 'guest_team_id');
}

そしてチームモデルでは:

public function homeMatches(){
    return $this->hasMany('App\Match', 'host_team_id');
}

public function awayMatches(){
    return $this->hasMany('App\Match', 'guest_team_id');
}

これがお役に立てば幸いです

于 2015-10-04T01:11:55.443 に答える
0

ありがとう、モハメド!

あなたの方法はうまく機能しますが、次のように定義する必要がありました。

public function host()
{
  return $this->hasOne('App\Team', 'id', 'host_id');
}

試合には 1 つのホスト チームしかなく、どのチームにも属していないためです。

とにかく、どうもありがとう!=)

于 2015-10-05T14:58:49.650 に答える