我为玩家创建系统 我有以下3个表:
matches:
- id
- win_points
- draw_points
- lose_points
aways:
- id
- match_id
- user_id
- score
homes:
- id
- match_id
- user_id
- score
现在我的关系有些问题 我可以得到用户,让他离开,回家,但我无法获得有关匹配的信息。
我正在考虑关于away_match和home_match的数据透视表,但我不知道这是不是一个好主意。
答案 0 :(得分:1)
你不需要任何支点。 在模型离开和主页中,您可以添加以下功能:
public function match(){
return $this->belongsTo(Match::class);
}
将返回Away / Home的比赛。与documentation不同,我在这里使用的是Match :: class,只有在将命名空间设置为App \ Models而不仅仅是App时才有效。
来自用户的现在可以获得与这段代码的匹配:
$match = $user->homes->find($homeId)->match;
(你从你的用户说你可以得到家园和离家,所以我假设你已经在用户模型中实现了类似的方法
public function homes(){
return $this->hasMany(Home::class);
}
答案 1 :(得分:0)
据我了解,您可以在match
和players
表之间使用Many to Many Relationship。
您可以这样考虑您的数据库结构:
players
- id
- name
- ...
matches
- id
- name
- ...
match_player
- id
- player_id
- match_id
- match_type (either - home match or away match)
- win_points
- lose_points
- ...
模型和关系就像:
class Player extends Model
{
public function matches()
{
return $this->belongsToMany(Match::class, 'match_player')
->withPivot(['match_type', 'win_points', 'lose_points']);
}
}
class Match extends Model
{
public function players()
{
return $this->belongsToMany(Player::class, 'match_player')
->withPivot(['match_type', 'win_points', 'lose_points']);
}
}
希望这有帮助!