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

前端之家收集整理的这篇文章主要介绍了数据库一对多在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/

原文链接:https://www.f2er.com/mssql/81671.html

猜你在找的MsSQL相关文章