Есть ли способ 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() заключается в том, что он удалит другие связанные записи. Другой альтернативой является syncWithoutDetaching(), которая выдает ошибку, если соответствующая запись уже существует.






вы можете использовать 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]);
Думаю, вам стоит взглянуть на
sync()laravel.com/docs/8.x/…$mpi->sites()->sync($site_id, ['pivot_data'=>$pivot_data]);