将关系添加到数据透视表 table laravel 中的附加值

add relationship to added values in pivot table laravel

我是 laravel 关系的新手,但我熟悉 SQL。我正在尝试添加一个具有其他值的枢轴 table 而不仅仅是两个主要 ID。

我有一些用户,还有一些团队。每个用户可以演奏多种乐器,可以加入多个团队,但每个团队只能演奏一种乐器。

我的枢轴迁移:

Schema::create('team_members', function (Blueprint $table) {

  $table->integer('user_id')->unsigned();
  $table->integer('team_id')->unsigned();
  $table->integer('instrument_id')->unsigned();

  $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
  $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade');
  $table->foreign('instrument_id')->references('id')->on('user_instruments')->onDelete('cascade');
});

我已经可以看到这个了:

$team = Team::first();
$team->members->first()->details->instrument_id; // "2"

如何在user_instruments上定义instrument_id之间的关系,这样我就可以做到$team->members->first()->details->instrument

更新: 我找到了这个:https://medium.com/@DarkGhostHunter/laravel-has-many-through-pivot-elegantly-958dd096db

不确定它是否有效...

您应该创建一个 intermediate model TeamMember,您将在其中定义与 Instrument 的关系。为此,修改团队和用户的多对多关系,添加选项 "using",如下所示:

// Team.php

public function members() {
  return $this->belongsToMany(App\User::class, 'team_members', 'user_id')
    ->using(App\TeamMember:class);
}

然后您需要为枢轴 table 创建一个名为 TeamMember 的模型,它将扩展 class 枢轴并定义与 Instrument 的关系。

class TeamMember extends Pivot {
  public function instrument() {
    return $this->belongsTo(App\Instrument::class);
  }
}

那么你应该能够像这样得到仪器(假设你为你的枢轴设置一个自定义名称 table 作为 "details"):$team->members->first()->details->instrument.