2 внешних ключа на один столбец в laravel 5.2

вот моя схема базы данных

введите здесь описание изображения

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

  • Администратор
  • Пользователь
  • Держать пари
  • Совпадение
  • Команда

Я не понимаю, как определить отношение между 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();


спасибо


person bobD    schedule 06.09.2016    source источник


Ответы (3)


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

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);
}
person Mihai Matei    schedule 06.09.2016
comment
не работает..., я сделал это return dd($team->matches()->where('id' ,'=', 1)->get());, и это ошибка Базовая таблица или представление не найдено: 1146 Таблица 'football_bet.match_team' не существует - person bobD; 06.09.2016
comment
Только что отредактировано .. не могли бы вы проверить это еще раз? dd($team->matches()->find(1)) - person Mihai Matei; 06.09.2016

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

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

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

person J3Rik0    schedule 06.09.2016

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

  1. Match.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');
    }
    
person Abdullah Al Shakib    schedule 06.09.2016
comment
работает нормально, спасибо, но как я могу получить доступ ко всем матчам, в которых участвовала команда? независимо от того, была ли это первая команда или вторая, это единственный способ объединить результаты массива? - person bobD; 06.09.2016
comment
Использовать с(). пример: Team::with('matches1', 'matches2'). чтобы узнать больше, проверьте это они означают "> stackoverflow.com/questions/30231862/ - person Abdullah Al Shakib; 07.09.2016