与Laravel5中的主持人团队和访客团队匹配的数据透视表

时间:2015-10-03 20:48:49

标签: laravel database-design eloquent laravel-migrations laravel-5.2

我希望在我的应用中与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模板引擎,我可以请求f.e.主队喜欢:

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

但我希望更具体,并希望有这样一个表:

match_id   host_team   guest_team
       1        1000         2000
       2        3000         4000

但后来我真的不知道如何设置这些关系......

有关于此的任何想法/想法? =)

2 个答案:

答案 0 :(得分:1)

以下是我的建议: 一场比赛只能有两支球队,主队和客队。这里的技巧是指定外键的列名称(不需要数据透视表)幸运的是,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');
}

我希望这是有帮助的

答案 1 :(得分:0)

谢谢你,穆罕默德!

你的方法效果很好,但我必须将其定义为:

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

因为匹配只有一个主机团队且不属于一个。

无论如何,非常感谢你! =)