2016-11-29 210 views
0

我爲玩家創建系統。
我有以下3個表:Laravel創建表和關係

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,但我不知道這是否是個好主意。

+1

你不需要一個數據透視表,你已經有了一個可以用來創建關係的外鍵,即* user *'hasMany()'aways和homes。 laravel.com/docs/5.3/eloquent-relationships#one-to-many不要忘記在構建遷移時定義關係:'$ table-> fo reign('user_id') - >引用('id') - > on('users');'(更多詳細信息,請參閱* Schema Builder *文檔)。 – user2693053

回答

1

你不需要任何樞軸。 在型號防範和家庭,你可以添加以下功能:

public function match(){ 
    return $this->belongsTo(Match::class); 
} 

它將返回客場/主頁的比賽。與documentation不同,我在這裏使用了Match :: class,它只有在您將名稱空間設置爲App \ Models而不僅僅是App時纔有效。

從用戶現在可以得到與之相匹配的這段代碼:

$match = $user->homes->find($homeId)->match; 

(你從你的用戶說,你可以得到家庭和跳投,所以我假設你已經在實施類似的方法用戶模型

public function homes(){ 
    return $this->hasMany(Home::class); 
} 
+0

這對我來說是最好的答案。一切運作良好。 –

+0

很高興有幫助。 – Cashbee

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']); 
    } 
} 

希望這有助於!