【发布时间】: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(),如果相关记录已经存在,则会引发错误。
标签: laravel eloquent pivot-table