数据透视表上的laravel一对多

Nev*_*ore 6 php laravel

我有一个四个表,分别是机构、表格、form_institution(数据透视表)和 form_institution_attributes。这是迁移:

机构表:

public function up() {
     Schema::create('institutions', function (Blueprint $table) {
         $table->increments('id');
         $table->string('name', 255);
         $table->softDeletes();
         $table->timestamps();
     });
 }
Run Code Online (Sandbox Code Playgroud)

机构模式:

public function forms() {
    return $this->belongsToMany(Form::class, 'form_institution');
}
Run Code Online (Sandbox Code Playgroud)

表格:

public function up() {
    Schema::create('forms', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name', 255);
        $table->softDeletes();
        $table->timestamps();
    });
}
Run Code Online (Sandbox Code Playgroud)

表格型号:

public function institutions() {
    return $this->belongsToMany(Institution::class, 'form_institution');
}
Run Code Online (Sandbox Code Playgroud)

形成机构数据透视表:

Schema::create('form_institution', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('institution_id')->unsigned();
    $table->integer('form_id')->unsigned();

    $table->foreign('institution_id')->references('id')->on('institutions');
    $table->foreign('form_id')->references('id')->on('forms');
});
Run Code Online (Sandbox Code Playgroud)

一切都好,直到这里。但是我需要再添加一张表,它是属性表,它是数据透视表之间的关系(一对多)

这是表:

Schema::create('form_institution_attributes', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('form_institution_id')->unsigned();
            $table->integer('field_name_id')->unsigned();
            $table->integer('input_type_id')->unsigned();
            $table->string('field_caption');
            $table->softDeletes();
            $table->timestamps();

            $table->foreign('form_institution_id')->references('id')->on('form_institution');
        });
Run Code Online (Sandbox Code Playgroud)

现在,当我调用机构表和机构-> 表单参数时,我想使用数据透视表获取 form_institution_attribute(子表)。但我不能这样做?

如何在数据透视表下添加表作为一对多关系?

Ore*_*kis 4

您应该能够使用HasManyThrough类型的关系。

但是,我认为最好的解决方案是将这些属性添加到您在“form_institution”表中创建的额外列中,然后通过将 withPivot 方法添加到关系定义中来更轻松地检索它们。

所以看起来像这样:

public function forms() {
    return $this->belongsToMany(Form::class, 'form_institution')
        ->withPivot([
            'field_name_id',
            'field_caption'.
            ...
        ]);
}

public function institutions() {
    return $this->belongsToMany(Institution::class, 'form_institution')
        ->withPivot([
            'field_name_id',
            'field_caption'.
            ...
        ]);
}
Run Code Online (Sandbox Code Playgroud)