Last active
May 17, 2024 03:31
-
-
Save jnbn/533f519083a1de2f5c9b3d60672fca9e to your computer and use it in GitHub Desktop.
Replicate (Duplicate) Eloquent Model With Relations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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ı"); | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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); } ?>