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');
}

所以当然我在 Pivot 表 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

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

因为一场比赛只有一个主队并且不属于一个。

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

于 2015-10-05T14:58:49.650 回答