2016-09-06 2 views
0

вот моя схема базы данных
2 внешних ключей на одной колонке в Laravel 5,2

enter image description here

и у меня есть эти модели:

  • Администратор
  • Пользователь
  • Bet
  • Матч
  • Team

Я запутался, как определить взаимосвязь между matches и teams в моделях

вот что я сделал до сих пор ...

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

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


на самом деле то, что мне нужно, это код, который должен быть помещен вместо //???... в обоих Team.php и Match.php так что я могу легко делать такие вещи ...

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


благодарит

ответ

2

Это должно быть что-то вроде этого:

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

не работает ... Я сделал это 'возвращение дд ($ Team-> матчи() -> где ('ID' , '=', 1) -> get()); 'и это ошибка ** Базовая таблица или представление не найдены: 1146 Таблица 'football_bet.match_team' не существует ** – bobD

+0

Просто отредактирован .. можете ли вы проверить его еще раз? 'dd ($ team-> matches() -> find (1))' –

+1

работал, спасибо :) – bobD

0

Вы можете указать, какой столбец должны быть направлены для каждого отношения:

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

Дай мне знать, если это помогает.

0

Было бы что-то вроде этого. Попробуйте.

  1. Матч.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

Работа прекрасна, спасибо, но как я могу получить доступ ко всем матчам, в которых была команда? независимо от того, что это была первая команда или вторая, Is It - единственный способ присоединиться к результатам массива? – bobD

+0

Использовать с(). Например: Team :: with ('matches1', 'matches2'). чтобы узнать больше, проверьте это http://stackoverflow.com/questions/30231862/laravel-eloquent-has-with-wherehas-what-do-they-mean –

Смежные вопросы