【问题标题】:One to Many Relationship with extra fields in Laravel与 Laravel 中的额外字段的一对多关系
【发布时间】:2017-11-22 05:22:33
【问题描述】:

我在 Laravel 中实现一些数据库 ER 时遇到问题。 “1-1”和“1-N”关系都存在问题。

我认为下面的示例非常简单。

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

一个团队有很多玩家。如果我需要为这种关系保留额外信息,就会出现问题。

一个例子是“球员从 Date_1 到 Date_2”。

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

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

【问题讨论】:

    标签: mysql database laravel eloquent


    【解决方案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);
        }
    
    }
    

    【讨论】:

    • 感谢 Edvard 的回答。我可以看到你的观点。我有一个问题。这样,每次我们需要 PlayerRecord 时,我们都会进行一个额外的查询(这确实不算多!)。这是最好的方法吗?
    • 确实多了一个查询。但我目前想不出更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 2018-07-19
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多