我在Laravel中实现一些数据库ER时遇到了问题。问题出现在" 1-1"和" 1-N"关系。
我认为这个例子很简单。
我们有 "团队" 以及 "播放器"
一个团队有很多玩家 。问题来自我需要保留关系的额外信息。
一个例子是" 玩家从Date_1到Date_2为该团队播放 "。
在这个例子中,似乎我们需要一个额外的表来保存这种信息。据我所知,Laravel不使用数据透视表来表示" 1-1"或" 1-N"。
那么,我们如何以Laravel的方式实现这个案例呢?
答案 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);
}
}