Laravel 5.8 在数据透视表上保存一对多关系
Posted
技术标签:
【中文标题】Laravel 5.8 在数据透视表上保存一对多关系【英文标题】:Laravel 5.8 saving one to many relation on pivot table 【发布时间】: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 :)
【参考方案1】:
如果您的目标是保存模型及其关系,请尝试使用 push
方法而不是 save
,它会递归保存。
$fileObject->push();
【讨论】:
我不应该定义我想要推送的内容吗? 我看不到你的entity
和 sourceClient
实现。 entity
看起来像一个多态关系,但我没有看到任何关于 sourceClient
的信息。以上是关于Laravel 5.8 在数据透视表上保存一对多关系的主要内容,如果未能解决你的问题,请参考以下文章