我正在Laravel开展团队体育统计项目。
以下是关于这个问题的主要模型草图:
class Team
// belongsToMany matches
// belongsToMany people
class Match
// belongsToMany teams
// belongsToMany people
class Person
// belongsToMany matches
// belongsToMany teams
我还为数据透视表制作了直接使用它们的模型。我有一些像goals_scored
,number
,position
等存储在那里的东西,使用方法来更新枢轴太笨拙了。
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
是否有一种雄辩的方式将MatchTeam
与MatchPerson
联系起来?我不想引入直接match_team_id
外键,我想使用两个表上的现有match_id
和team_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');