【问题标题】:Eager loading same model multiple times in a model渴望在模型中多次加载相同的模型
【发布时间】:2015-12-13 18:41:55
【问题描述】:

我有一个名为 Player 的模型,带有“id”和“shortname”。 我有另一个名为 Team 的模型,有 'id'、'teamname'、'player_1_id'、'player_2_id' 和 'player_3_id'。

我正在尝试使用关系:

//在模型团队中

public function players()
{
    return $this->hasOne('App\Player', 'id','player_1_id')
      ->hasOne('App\Player', 'id','player_2_id')
      ->hasOne('App\Player', 'id','player_3_id');
}

// 在控制器中

$resource = Team::with('players')->get(); 不起作用。

在这种情况下,使用 Eagerloading 的最佳(最快)方式是什么? 提前谢谢...

【问题讨论】:

    标签: database laravel laravel-5 eloquent database-normalization


    【解决方案1】:

    您应该阅读有关数据库规范化的信息。在团队数据库中存储 player_1_idplayer_2_idplayer_3_id 是没有意义的。如果团队将包含 20 名球员怎么办?你会创建另一个字段吗?

    您应该将team_id 添加到 Player 模型中(以防玩家始终只属于一个团队)或创建额外的表来存储玩家和团队之间的连接。

    【讨论】:

    • 谢谢马尔辛。我阅读了有关数据库规范化的信息,并理解,正如您所说,我应该只使用 player_id,如果需要,使用更多行。但是,这将大大增加行数。它不会减慢查询速度,有更多的行吗? (在我的真实项目中,我每队有 20 名球员:P)
    • @Attorn 很高兴我能帮助你。最好在没有代码的情况下从一开始就跟踪设计错误,而不是在整个应用程序已经正常运行时才发现它们
    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    相关资源
    最近更新 更多