laravel:更新或创建(更新插入)数据透视表
Posted
技术标签:
【中文标题】laravel:更新或创建(更新插入)数据透视表【英文标题】:laravel: update or create (upsert) for pivot table 【发布时间】:2021-04-03 13:34:43 【问题描述】:有没有一种 Laravel(即简单的)方法可以在数据透视表上执行 upsert?
我正在使用以下代码:
if ($mpi->sites()->where('site_id', $site_id)->exists())
$mpi->sites()->updateExistingPivot($site_id, ['pivot_data'=>$pivot_data]);
else
$mpi->sites()->attach($site_id, ['pivot_data'=>$pivot_data]);
我想要的是这样的:
$mpi->sites()->updateOrAttach($site_id, ['pivot_data'=>$pivot_data]);
我的 Mpi 模型如下所示:
class Mpi extends Model
public function sites()
return $this->belongsToMany("App\Site")->withPivot('site_mrn');
.....
【问题讨论】:
猜你应该看看sync()
laravel.com/docs/8.x/…$mpi->sites()->sync($site_id, ['pivot_data'=>$pivot_data]);
所以,sync()
的问题是它会删除其他相关记录。另一种选择是syncWithoutDetaching()
,如果相关记录已经存在,则会引发错误。
【参考方案1】:
您可以使用newPivotQuery 女巫为数据透视表创建一个新的查询生成器
$mpi->sites()->newPivotQuery()
->updateOrInsert(['mpi_id'=>$mpi->id,'site_id'=>$site->id]
,['mpi_id'=>$mpi->id,'site_id'=>$site->id,'pivot_data'=>$pivot_data]);
【讨论】:
以上是关于laravel:更新或创建(更新插入)数据透视表的主要内容,如果未能解决你的问题,请参考以下文章