我希望在我的应用中与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
但后来我真的不知道如何设置这些关系......
有关于此的任何想法/想法? =)
答案 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');
}
因为匹配只有一个主机团队且不属于一个。
无论如何,非常感谢你! =)