Comment dupliquer une ligne dans la base de données avec Eloquent Laravel

Parfois, on a besoin de dupliquer des lignes dans une table de la base de données. Laravel a pensé à nous pour nous simplifier la tâche.


Il suffit d'utiliser la méthode replicate()


Exemple, nous avons une table carts et nous souhaitons dupliquer cette ligne. Nous allons d'abord récupérer la ligne à dupliquer.


$cart = Cart::find(1);


Maintenant, avec les 2 lignes suivantes, nous allons dupliquer :


$new_cart = $cart->replicate();
$new_cart->save();


Ce panier à une table liée contenant des références. Nous avons donc dans notre modèle Cart, une méthode references() comme ceci :


public function references()
{
  return $this->hasMany(CartReference::class);
}


Dernière étape, nous allons répliquer les références liées à la ligne précédemment dupliquée.


foreach($cart->references as $reference) {
	$new_cart->references()->save($reference->replicate());
}



Cours rédigé par Vincent, publié le 18/03/2021