与两把钥匙的雄辩关系

时间:2016-11-10 18:24:54

标签: laravel eloquent

我正在Laravel开展团队体育统计项目。

以下是关于这个问题的主要模型草图:

class Team
    // belongsToMany matches
    // belongsToMany people

class Match
    // belongsToMany teams
    // belongsToMany people

class Person
    // belongsToMany matches
    // belongsToMany teams

我还为数据透视表制作了直接使用它们的模型。我有一些像goals_scorednumberposition等存储在那里的东西,使用方法来更新枢轴太笨拙了。

class MatchTeam  // Participation of a team in the match
    // belongsTo match
    // belongsTo team

class MatchPerson  // Participation of a person in the match
    // belongsTo match
    // belongsTo team
    // belongsTo person

是否有一种雄辩的方式将MatchTeamMatchPerson联系起来?我不想引入直接match_team_id外键,我想使用两个表上的现有match_idteam_id字段来执行此操作。

目前我在MatchTeam模型中有这个:

public function matchPeople()  // the roster
{
    return $this->hasMany('App\Stats\MatchPerson', 'team_id', 'team_id')->where('match_id', $this->match_id);
}

工作正常。但是,我非常担心此代码对于关系的性质不公平 - 它们与team_id无关,它们基于这两个字段相关。我也可以这样写:

public function matchPeople()  // the roster
{
    return $this->hasMany('App\Stats\MatchPerson', 'match_id', 'match_id')->where('team_id', $this->team_id);
}

我是否有一种公平的方式可以根据Eloquent中的两列来指定关系?

当然,这个问题更多是出于好奇,因为制作这个方法的实际问题已经被征服了。

好奇的用法示例:

$teamA->goals_for = $teamA->matchPeople->sum('goals');

0 个答案:

没有答案