【问题标题】:Laravel 5.8 saving one to many relation on pivot tableLaravel 5.8 在数据透视表上保存一对多关系
【发布时间】:2019-11-30 04:50:44
【问题描述】:

我与数据透视表有多对多关系。在这个数据透视表中,我有 2 个一对多关系。它看起来像这样画出来的:

在代码中是这样的:

WorkflowStep 模型:

public function workflowinstances(): BelongsToMany
{
    return $this->belongsToMany(WorkflowInstance::class)
        ->using(WorkflowInstanceWorkflowStep::class)
        ->withPivot([
            'started_at',
            'finished_at',
            'failed_at',
            'output',
        ])
        ->withTimestamps();
}

工作流实例模型:

public function workflowSteps(): BelongsToMany
{
    return $this->belongsToMany(WorkflowStep::class)
        ->using(WorkflowInstanceWorkflowStep::class)
        ->withPivot([
            'started_at',
            'finished_at',
            'failed_at',
            'output',
        ])
        ->withTimestamps();
}

WorkflowInstanceWorkflowStep Pivot 模型:

public function sourceFile(): BelongsTo
{
    return $this->belongsTo(File::class, 'source_file_id', 'id');
}

public function destinationFile(): BelongsTo
{
    return $this->belongsTo(File::class, 'destination_file_id', 'id');
}

文件模型:

public function workflowInstanceStepSources(): HasMany
{
    return $this->hasMany(WorkflowInstanceWorkflowStep::class, 'source_file_id', 'id');
}

public function workflowInstanceStepDestinations(): HasMany
{
    return $this->hasMany(WorkflowInstanceWorkflowStep::class, 'destination_file_id', 'id');
}

现在我的目标是保存文件 - 透视关系,但这似乎不起作用:

$fileObject = $workflowStep->entity->sourceClient->files()->create([
    'name' => $filename,
    'extension' => $file['extension'],
    'category' => 'transfer',
    'original_file_id' => 1,
    'path' => $filePath,
    'link_id' => 1,
]);

$fileObject->workflowInstanceStepSources()->save();

我创建了一个新的 File 对象,然后我想用我的关系将它链接到数据透视表

我在这里尝试的可能吗?

编辑完整的数据库方案

【问题讨论】:

  • 能否在save 周围添加代码以了解上下文?
  • @Shizzen83 我编辑了原帖
  • 不是答案而是问题,你是如何生成如此漂亮的图表的?
  • @Shobi drawsql.app :)

标签: laravel laravel-5 eloquent


【解决方案1】:

如果您的目标是保存模型及其关系,请尝试使用 push 方法而不是 save,它会递归保存。

$fileObject->push();

【讨论】:

  • 我不应该定义我想要推送的内容吗?
  • 我看不到你的 entitysourceClient 实现。 entity 看起来像一个多态关系,但我没有看到任何关于 sourceClient 的信息。
猜你喜欢
  • 2018-03-20
  • 1970-01-01
  • 2021-05-31
  • 2023-02-05
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 2018-06-27
  • 2018-09-23
相关资源
最近更新 更多