与Laravel中额外字段的一对多关系

时间:2017-06-19 21:04:14

标签: mysql database laravel eloquent

我在Laravel中实现一些数据库ER时遇到了问题。问题出现在" 1-1"和" 1-N"关系。

我认为这个例子很简单。

我们有 "团队" 以及 "播放器"

一个团队有很多玩家 。问题来自我需要保留关系的额外信息。

一个例子是" 玩家从Date_1到Date_2为该团队播放 "。

在这个例子中,似乎我们需要一个额外的表来保存这种信息。据我所知,Laravel不使用数据透视表来表示" 1-1"或" 1-N"。

那么,我们如何以Laravel的方式实现这个案例呢?

1 个答案:

答案 0 :(得分:1)

这是一个棘手的问题。但我还会再增加一个名为player_records的表格。具有以下属性

player_id
team_id. 
start_date
end_date

在每个模型中,我都会有辅助方法来获得活跃的玩家。

以下是团队模型。

class Team extends Model
{

    public function playerRecords() {
        return $this->hasMany(PlayerRecord::class);
    }

    public function activePlayers() {
        return $this->playerRecords()->where('start_at', '<=', Carbon::now())->where('ends_at', '>=', Carbon::now())->with('player')->get()->pluck('player');
    }
}

这是播放器模型

class Player extends Model
{

    public function playerRecords() {
        return $this->hasMany(PlayerRecord::class);
    }

}

这是PlayerRecord模型

class PlayerRecord extends Model
{

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

}