Как скопировать объект в 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);
}
Комментарии