加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库一对多在Laravel有两个外键字段

发布时间:2020-12-12 16:38:19 所属栏目:MsSql教程 来源:网络整理
导读:我一直试图定义一些数据库模式来使用laravel框架.我想模拟一场足球比赛.我想要做的第一步是定义实体关系图,但是我发现这个(我认为很简单)在一些方面是混乱的. 首先,明显的做法是说一场比赛与两队相关,一队与任意数量的比赛有关.所以我们会有一个“多对多”的
我一直试图定义一些数据库模式来使用laravel框架.我想模拟一场足球比赛.我想要做的第一步是定义实体关系图,但是我发现这个(我认为很简单)在一些方面是混乱的.

首先,明显的做法是说一场比赛与两队相关,一队与任意数量的比赛有关.所以我们会有一个“多对多”的关系.

但是,实现多对多的关系是有两个表和一个中间表来关联两个实体.我认为这将是太多了,当我知道一场比赛总是有两个球队,只需要有两个列(local_id和visitant_id)和外部的球队表格就足够了.另外,我想要能够做到Match :: find(1) – > local()或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;

更新:github链接不起作用,因为laravel没有以这种方式再次出现错误报告:http://laravel-news.com/2014/09/laravel-removes-github-issues/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读