Как скопировать объект в Laravel вместе со связями belongsToMany

$newModel = $oldModel->replicate();
$newModel ->push(); // сохраняем в базу чтобы получить ID у модели

// чистим загруженные связи, чтобы далее вручную выбрать, какие именно хотим скопировать
$oldModel->relations = [];

// загружаем только те связи, которые хотите копировать
$oldModel->load('categories', 'parameters' );

foreach ($oldModel->getRelations() as $relationName => $values){
$newModel ->{$relationName}()->saveMany($values);
// saveMany подходит только для связи типа belongsToMany
}

 

Как альтернативную функцию, которая пересохраняет все типы связей можно попробовать такой вариант (но не на всех версиях Laravel срабатывает):

foreach ($oldModel->relations as $relationName => $values){
$newModel ->{$relationName}()->sync($values);
}

Комментарии

Комментариев пока нет, вы можете оставить свой: