Отношения мультоманы - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь получить отношения между тремя таблицами.Следующие таблицы:

table: documentsets
docflow_documentset_id
..
..

table: subsets
docflow_subset_id
docflow_documentset_id
..
..

table: subdocuments
docflow_subdocument_id
docflow_subset_id
..
..

Я пытаюсь получить все вложенные документы, принадлежащие к набору документов с подмножествами промежуточных таблиц.

Первичные ключи таблиц:

docflow_documentset_id, docflow_subset_id, docflow_subdocument_id

в моей модели docflow_documentsets у меня есть следующая функция:

    public function subdocuments()
    {
        return $this->belongsToMany(docflow_subdocuments::class, 'bvd_pp_prod_docflow_subsets', 'docflow_subset_id', 'docflow_subset_id');
    }

и в моем docflow_subdocuments следующее:

public function documentsets()
    {
        return $this->belongsToMany(docflow_documentsets::class, 'bvd_pp_prod_docflow_subsets', 'docflow_subset_id', 'docflow_subset_id');
    }
* 1015в de docflow_subdocuments не вызывается вообще, это сводит меня с ума, почему это происходит: (

Может кто-нибудь помочь здесь?

РЕДАКТИРОВАТЬ:

миграции:

Schema::create('bvd_pp_prod_docflow_documentsets', function (Blueprint $table) {
        $table->increments('docflow_documentset_id');
        $table->integer('docflow_id');
        $table->string('docflow_documentset_name', 50)->nullable();
        $table->string('docflow_documentset_type', 50)->nullable();
    });

Schema::create('bvd_pp_prod_docflow_subsets', function (Blueprint $table) {
        $table->increments('docflow_subset_id');
        $table->integer('docflow_documentset_id');
        $table->boolean('docflow_subset_staple');
    });

Schema::create('bvd_pp_prod_docflow_subdocuments', function (Blueprint $table) {
        $table->increments('docflow_subdocument_id');
        $table->integer('docflow_subset_id');
        $table->string('docflow_subdocument_document', 50);
        $table->string('docflow_subdocument_stamp', 50);
        $table->string('docflow_subdocument_mediatype', 50);
        $table->boolean('docflow_subdocument_duplex');
    });

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Наконец нашел решение:

/**
 * Get subdocuments belonging to this documentset with intermediate model
 */
public function subdocuments()
{
    return $this->hasManyThrough(
            docflow_subdocuments::class, 
            docflow_subsets::class,
            'docflow_documentset_id',
            'docflow_subset_id'
        );
}

дает мне желаемый результат, это потому, что я создал внешние ключи для таблиц?

0 голосов
/ 03 октября 2018

Вы должны создавать модели с принадлежащим и hasMany

В наборе документов docflow_docment:

public function subsets(){
    return $this->hasMany(docflow_subset::class);
}

В наборе документов docflow:

public function subdocuments(){
    return $this->hasMany(docflow_subdocument::class);
}

public function documentsets(){
    return $this->belongsTo(docflow_documentset::class, 'docflow_documentset_id');
}

В документе docflow_subdocument:

public function subsets(){
    return $this->belongsTo(docflow_subset::class, 'docflow_subset_id');
}
...