Skip to content

Instantly share code, notes, and snippets.

@jnbn
Last active May 17, 2024 03:31
Show Gist options
  • Save jnbn/533f519083a1de2f5c9b3d60672fca9e to your computer and use it in GitHub Desktop.
Save jnbn/533f519083a1de2f5c9b3d60672fca9e to your computer and use it in GitHub Desktop.
Replicate (Duplicate) Eloquent Model With Relations
<?php
public function replicateWithRelations(QuestionCategory $questioncategory)
{
$newCategory = $questioncategory->replicate();
$newCategory->name = "Kopyası: ".$questioncategory->name;
$newCategory->push();
$questioncategory->relations = [];
//load relations on EXISTING MODEL
$questioncategory->load('questions');
//re-sync everything
foreach ($questioncategory->getRelations() as $relationName => $values){
$newCategory->{$relationName}()->sync($values);
}
return redirect()->route('neon.questioncategory.edit',$newCategory->id)->withSuccess("Kategori başarıyla kopyalandı");
}
?>
@elinardo10
Copy link

aproimorando um pouco mais no caso de quando tiver uma sub-relação

authorize('duplicateProduct', $product); $newProduct = $product->replicate(); $newProduct->name = $product->name . " [Cópia]"; $newProduct->save(); $product->relations = []; $product->load('variations.items'); $items = []; foreach ($product->variations as $variation) { $newProduct->variations()->create([ 'name' => $variation->name, 'limit_min' => $variation->limit_min, 'limit_max' => $variation->limit_max, 'ranking' => $variation->ranking, ]); foreach ($variation->items as $item) { $items[] = [ 'key' => $variation->name, 'name' => $item->name, 'ranking' => $item->ranking, 'amount' => $item->amount ]; } } $newProduct->load('variations.items'); $itemsCollection = collect($items); foreach ($newProduct->variations as $newVariation) { $itemsToSave = $itemsCollection->where('key', $newVariation->name)->map(function ($item) { return [ 'name' => $item['name'], 'ranking' => $item['ranking'], 'amount' => $item['amount'] ]; }); $newVariation->items()->createMany($itemsToSave); } return new ProductResource($newProduct); } ?>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment