php - 数据透视表上的 laravel 一对多

标签 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();
     });
 }

机构模型:

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

表格:

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

表单模型:

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

形成机构数据透视表:

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');
});

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

这是表格:

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');
        });

现在,当我调用 institution 表和 institution->forms 参数时,我想获得带有数据透视表的 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'.
            ...
        ]);
}

关于php - 数据透视表上的 laravel 一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46887916/

相关文章:

Laravel Passport 以编程方式创建客户端

java - 响应代码 422 转到 onFailure 方法

php - PHP-警告消息太长,看不到?

javascript - 将 Vue 变量传递给 Vue 函数

php - 如何在没有 curl 的情况下发出帖子请求?

php - 如果找到某个字符串则返回 true 或 false

php - 使用 Laravel/Lumen DB facade 转储 sql 查询

laravel - 使用babel和laravel-mix将ES6转换为ES2015

javascript - ECHO 在 PHP 中发布来自 AJAX 的数据

javascript - 传递给 Javascript 函数的变量没有改变