laravel与多个foriegn键获得关系

时间:2018-02-07 05:38:33

标签: php laravel

我有三张桌子

id | Name

优胜者

id | user_id | league_id

team_user

team_id | user_id | league_id

我在Winner.php模型中尝试做的是创建一种关系,通过user_idleague_id

将胜利者与团队联系起来

所以基本上我可以致电Winner->team,它会返回Winner所属的小组,user_idleague_id都匹配。

我在想

public function team()
 {
    return $this->belongsTo('App\Team', 'user_id', 'league_id');
 }

但这显然不起作用。我抓住了头脑,因为我拥有了让团队成员league_iduser_id所需的所有信息。

3 个答案:

答案 0 :(得分:0)

如果您的获胜者模型在代码下面返回多个团队使用:

public function teams()
{
    return $this->belongsToMany('App\Team', 'user_id', 'league_id');
}

如果您的获胜者模型仅使用以下代码返回一个团队:

public function team()
{
    return $this->belongsTo('App\Team', 'user_id', 'league_id');
}

注意:belogsTo()中的第3个参数指定父表的自定义键

答案 1 :(得分:0)

您可以附加其他where()条款:

public function team()
{
    return $this->belongsTo('App\Team', 'user_id', 'user_id')->where('league_id', $this->league_id);
}

注意:这仅适用于lazy loading。看here,它可能对你有帮助。

答案 2 :(得分:0)

我只是将它用作函数而不是关系并在我的控制器中循环使用。不是最好的,而是我所有的工作:

Winner.php

public function team()
  {

    $team_id = DB::table('team_user')
                    ->where('league_id',  $this->league_id )
                    ->where('user_id',  $this->user_id )
                    ->first()
                    ->team_id;

    $team = Team::find( $team_id );

    return $team;

  }

在我的控制器中

foreach( $league->winners as $winner)
      {
        $winner['team'] = $winner->team();
      }