2016-09-06 9 views
0

voici mon schéma de base de données
2 clés étrangères sur une colonne dans Laravel 5.2

enter image description here

et j'ai ces modèles:

  • Administrateur
  • utilisateur
  • Bet
  • Résultat
  • équipe

Je suis confus comment définir la relation entre matches et teams dans les modèles

Voici ce que je l'ai fait jusqu'à présent ...

User.php

public function bets() 
{ 
    return $this->hasMany('\App\Bet'); 
} 

Bet.php

public function user() 
{ 
    return $this->belongsTo('\App\User'); 
} 

public function match() 
{ 
    return $this->belongsTo('\App\Match'); 
} 

Match.php

public function bets() 
{ 
    return $this->hasMany('\App\Bet'); 
} 

//????????????? 

Team.php

//????????????? 


fait ce que je dois le code qui doit être placé au lieu de //???... dans les deux Team.php et Match.php afin que je puisse facilement faire de telles choses ...

$team->matches(); 
$match->team1(); 
$match->team2(); 


grâce

Répondre

2

Il devrait y avoir quelque chose comme ceci:

Match.php

public function team1() 
{ 
    return $this->belongsTo('\App\Team', 'team1_id'); 
} 

public function team2() 
{ 
    return $this->belongsTo('\App\Team', 'team2_id'); 
} 

Team.php

public function matches() 
{ 
    return $this->hasMany('\App\Match', 'team1_id') 
       ->orWhere('team2_id', $this->id); 
} 
+0

ne fonctionne pas ..., je l'ai fait 'retour dd ($> matchs en équipe() -> où ('id' , '=', 1) -> get()); 'et c'est l'erreur ** Table de base ou vue non trouvée: 1146 Table 'football_bet.match_team' n'existe pas ** – bobD

+0

Juste édité .. pouvez-vous s'il vous plaît le vérifier à nouveau? 'dd ($ team-> matches() -> find (1))' –

+1

travaillé, merci :) – bobD

0

Vous pouvez spécifier quelle colonne doit être ciblée pour chaque relation:

public function team1() { 
     return $this->belongsTo('\App\Match', 'team1_id'); 
    } 
public function team2() { 
     return $this->belongsTo('\App\Match', 'team2_id'); 
    } 

Permettez-moi de savoir si cela aide.

0

Ce serait quelque chose comme ça. Essaie.

  1. Correspondance.php

    public function team1(){ 
        return $this->belongsTo('App\Team', 'team1_id'); 
    } 
    
    public function team2(){ 
        return $this->belongsTo('App\Team', 'team2_id'); 
    } 
    
  2. Team.php

    public function matches1(){ 
        return $this->hasMany('App\Match', 'team1_id', 'id'); 
    } 
    
    public function matches2(){ 
        return $this->hasMany('App\Match', 'team2_id', 'id'); 
    } 
    
+0

le travail est bien, merci, mais comment puis-je accéder à tous les matches que l'équipe était? peu importe que ce soit la première équipe ou la deuxième, est-ce la seule façon de rejoindre les résultats du tableau? – bobD

+0

Utiliser avec(). exemple: Team :: with ('matches1', 'matches2'). pour en savoir plus, consultez ce http://stackoverflow.com/questions/30231862/laravel-eloquent-has-with-wherehas-what-do-they-mean –