2015-12-13 55 views
0

我有一个名为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();不工作。

在这种情况下,哪个是使用预加载的最佳(最快)方式? 在此先感谢...

回答

2

您应该阅读有关数据库规范化。在团队数据库中存储player_1_id,player_2_idplayer_3_id没有任何意义。如果团队将包含20名球员怎么办?你会创建另一个领域?

您应该将team_id添加到玩家模型中(如果玩家总是只属于一个团队)或创建额外的表格,您将存储玩家和团队之间的连接。

+0

谢谢Marcin。我阅读了关于数据库规范化的知识,并且正如你所说的那样理解,我应该只使用player_id,如果需要的话使用更多的行。但是,这会使行数增加很多。它不会减慢查询速度,有更多的行吗? (在我真正的项目中,我每队有20名球员:P) – Attorn

+0

@Attorn很高兴我能帮助你。当你没有代码时,最好跟踪设计错误,而不是在你已经有了整个应用程序的时候找到它们 –