【问题标题】:add relationship to added values in pivot table laravel在数据透视表 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

不确定它是否会起作用......

【问题讨论】:

    标签: laravel eloquent many-to-many relationship


    【解决方案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');
    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2019-12-21
    • 2016-01-23
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多