Post

Symfony – Cascade persist et remove

Symfony – Cascade persist et remove

Cours 19 — Cascade persist et remove

Introduction

Les options cascade permettent à Doctrine d’effectuer automatiquement certaines opérations sur les entités liées.

Les plus utilisées sont :

1
2
persist
remove

Cascade persist

Sans cascade :

1
2
3
4
5
$patient->addSejour($sejour);

$entityManager->persist($patient);
$entityManager->persist($sejour);
$entityManager->flush();

Avec cascade persist

1
2
3
4
5
6
#[ORM\OneToMany(
    targetEntity: Sejour::class,
    mappedBy: 'patient',
    cascade: ['persist']
)]
private Collection $sejours;

Puis :

1
2
3
4
$patient->addSejour($sejour);

$entityManager->persist($patient);
$entityManager->flush();

Doctrine enregistre automatiquement le séjour.


Cascade remove

Sans cascade :

1
2
3
$entityManager->remove($sejour);
$entityManager->remove($patient);
$entityManager->flush();

Avec cascade remove

1
2
3
4
5
6
#[ORM\OneToMany(
    targetEntity: Sejour::class,
    mappedBy: 'patient',
    cascade: ['remove']
)]
private Collection $sejours;

Puis :

1
2
$entityManager->remove($patient);
$entityManager->flush();

Doctrine supprime automatiquement les séjours liés.


Utiliser plusieurs cascades

1
2
3
4
5
6
#[ORM\OneToMany(
    targetEntity: Sejour::class,
    mappedBy: 'patient',
    cascade: ['persist', 'remove']
)]
private Collection $sejours;

Comprendre le fonctionnement

1
2
3
Patient
↓
Séjours

Avec :

1
cascade persist

l’enregistrement du patient entraîne l’enregistrement des séjours.

Avec :

1
cascade remove

la suppression du patient entraîne la suppression des séjours.


Attention

Une cascade remove peut supprimer un grand nombre d’enregistrements.

Il faut l’utiliser avec prudence.


Conclusion

Les cascades automatisent certaines opérations Doctrine.

À retenir :

  • persist : enregistrement automatique ;
  • remove : suppression automatique ;
  • plusieurs cascades peuvent être combinées ;
  • attention aux suppressions en cascade.
This post is licensed under CC BY 4.0 by the author.