将关系添加到数据透视表 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
.
我是 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
.