Laravel创建表和关系

时间:2016-11-29 12:27:40

标签: php mysql laravel pivot-table relationship

我为玩家创建系统 我有以下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的数据透视表,但我不知道这是不是一个好主意。

2 个答案:

答案 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)

据我了解,您可以在matchplayers表之间使用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']);
   }
}

希望这有帮助!