gpt4 book ai didi

Laravel 中具有两个外键字段的一对多数据库

转载 作者:太空狗 更新时间:2023-10-30 01:41:26 24 4
gpt4 key购买 nike

我一直在尝试定义一些数据库模式来使用 laravel 框架。我想模拟一场足球比赛。我想做的第一步是定义实体关系图,但我发现这(我认为这很微不足道)在某些方面令人困惑。

首先,显而易见的方法是说一场比赛与两支球队相关,而一支球队与任意数量的比赛相关。因此,我们将拥有“多对多”关系。

但是多对多关系的实现是有两个表和一个中间表来关联两个实体。我认为这太过分了,因为我知道一场比赛总是有两个团队,并且只需要两列(local_id 和 visitant_id)以及 Teams 表的外键就足够了。另外,我希望能够:

Match::find(1)->local() or Match::find(1)->visitant();

所以,考虑到这一点,我正在实现“一对多”关系,但我还有另一个问题。要检索一支球队参加过的所有比赛,我想这样做:

Team::find(1)->matches(); 

但是我不能这样做,因为我在eloquent中定义matches()方法时只能指定一个键列(默认是team_id,但应该是visitant_id和local_id)。

最佳答案

在深入研究源代码后,我发现有一种方法可以让我的数据库模式保持原样并实现我想要的(至少在 Laravel 4 中)。我在 github 上发布了我的问题,Taylor Otwell(框架的创建者)给了我正确的答案:https://github.com/laravel/framework/issues/1272

引用他的话,应该就这么简单:

class Team extends Eloquent  {
public function allMatches()
{
return $this->hasMany('Match', 'visitant_id')->orWhere('local_id', $this->id);
}
}

然后……

$team = Team::find(2);
$matches = $team->allMatches;

关于Laravel 中具有两个外键字段的一对多数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15646678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com