我有一个四个表,分别是机构、表格、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(子表)。但我不能这样做?
如何在数据透视表下添加表作为一对多关系?
您应该能够使用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)
| 归档时间: |
|
| 查看次数: |
8095 次 |
| 最近记录: |