Laravel模型关系

时间:2018-06-17 17:11:39

标签: laravel

我想在第三个表之间建立两个表之间的关系,如:

  1. 玩家只能签到1个团队。
  2. 团队可以有很多玩家。
  3. 目前的关系

    player model

    public function teams()
        {
           return $this->belongsToMany(Team::class, 'team_players', 'team_id', 'player_id');
        }
    

    team model

    public function players()
        {
            return $this->belongsToMany(Player::class, 'team_players', 'team_id', 'player_id');
        }
    

    更多...

    目前可以同时为无限队伍选择1名球员,我想要的是1名球员= 1名球队。如果我将球员与球队分开,那么就可以将其签到另一支球队。

    我该怎么做?

2 个答案:

答案 0 :(得分:1)

希望您有一个数据透视表team_players,其中至少包含team_playersteam_id字段。考虑到这一点,您应该反转当前team模型中的外键,例如,将其更改为:

public function players()
{
    return $this->belongsToMany(
        Player::class,
        'team_players',
        'player_id', // foreign key of this model
        'team_id' // foreign key of joining model
    );
}
  

第三个参数是您所在模型的外键名称   正在定义关系,而第四个论点是   要加入的模型的外键名称。 Check the documentation

答案 1 :(得分:0)

我相信在你的情况下,你需要团队和球员之间的一对多关系。一个团队可以拥有很多"许多玩家,而玩家"属于"一个团队。 所以对于团队模型

public function players()
{
    return $this->hasMany(Player::class);
}

和玩家模型

public function team()
{
   return $this->belongsTo(Team::class);
}

就数据库表而言,您只需要一个" team_id"玩家表中的字段来保持关系。