Post

Symfony – Modifier un enregistrement

Symfony – Modifier un enregistrement

Cours 15 — Modifier un enregistrement

Introduction

Pour modifier un enregistrement, il faut :

  1. rechercher l’objet ;
  2. modifier ses propriétés ;
  3. enregistrer les changements.

Principe général

1
2
3
4
5
$patient = $patientRepository->find($id);

$patient->setNom('Martin');

$entityManager->flush();

Résultat :

1
Le nom du patient est modifié dans la base de données.

Rechercher l’objet

1
$patient = $patientRepository->find($id);

Doctrine récupère l’objet depuis la base.


Modifier une propriété

1
$patient->setNom('Martin');

L’objet est modifié en mémoire.


Enregistrer les modifications

1
$entityManager->flush();

Doctrine met à jour la base de données.


Exemple complet

1
2
3
4
5
6
7
8
9
$patient = $patientRepository->find($id);

if (!$patient) {
    throw $this->createNotFoundException();
}

$patient->setNom('Martin');

$entityManager->flush();

Utiliser dans un contrôleur

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#[Route('/patient/modifier/{id}', name: 'patient_edit')]
public function edit(
    int $id,
    PatientRepository $patientRepository,
    EntityManagerInterface $entityManager
): Response
{
    $patient = $patientRepository->find($id);

    if (!$patient) {
        throw $this->createNotFoundException();
    }

    $patient->setNom('Martin');

    $entityManager->flush();

    return new Response('Patient modifié');
}

Pourquoi pas persist() ?

L’objet existe déjà dans la base.

Doctrine le surveille automatiquement.

Il suffit donc d’utiliser :

1
$entityManager->flush();

Comprendre le processus

1
2
3
4
5
6
7
find()
↓
Modification
↓
flush()
↓
Base de données

Conclusion

Pour modifier un enregistrement :

1
2
3
4
5
$objet = $repository->find($id);

$objet->setPropriete(...);

$entityManager->flush();

À retenir :

  • rechercher l’objet ;
  • modifier ses propriétés ;
  • utiliser flush() ;
  • persist() n’est généralement pas nécessaire.
This post is licensed under CC BY 4.0 by the author.