2017-06-19 47 views
1

我在Laravel中遇到了一些实现一些数据库ER的问题。 “1-1”和“1-N”关系存在问题。Laravel中与额外字段的一对多关系

下面的示例波纹管非常简单,我认为。

我们有一个“团队”而一个“玩家”

有一个队很多球员。问题出在我需要保留关系的额外信息的情况下。

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

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

那么,我们将如何实施这种情况的Laravel方式..?

回答

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

} 
+0

谢谢爱德华回答。我可以看到你的观点。我有一个问题,但。这样我们每次需要PlayerRecord时都会做一个额外的查询(这个确实不算太多!)。这是最好的方式吗? –

+0

确实有一个额外的查询。但我目前无法找出更好的解决方案。 –

相关问题