在数据透视表 laravel 中添加与附加值的关系
Posted
技术标签:
【中文标题】在数据透视表 laravel 中添加与附加值的关系【英文标题】:add relationship to added values in pivot table laravel 【发布时间】:2020-03-23 13:32:43 【问题描述】:我是 laravel 关系的新手,但我熟悉 SQL。我正在尝试添加一个具有其他值的数据透视表,而不仅仅是两个主要 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
不确定它是否会起作用......
【问题讨论】:
【参考方案1】:您应该创建一个intermediate model TeamMember,您将在其中定义与 Instrument 的关系。为此,请修改团队和用户的多对多关系,添加“使用”选项,如下所示:
// Team.php
public function members()
return $this->belongsToMany(App\User::class, 'team_members', 'user_id')
->using(App\TeamMember:class);
然后您需要为您的数据透视表创建一个名为 TeamMember 的模型,它将扩展 Pivot 类并定义与 Instrument 的关系。
class TeamMember extends Pivot
public function instrument()
return $this->belongsTo(App\Instrument::class);
那么您应该能够像这样获得仪器(假设您为数据透视表设置了自定义名称为“详细信息”):$team->members->first()->details->instrument
。
【讨论】:
谢谢!这个对我有用!return $this->belongsToMany('\App\Team', 'team_members')->as('details')->withPivot('instrument_id')->using('App\TeamMember');
以上是关于在数据透视表 laravel 中添加与附加值的关系的主要内容,如果未能解决你的问题,请参考以下文章