IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

utiliser la fonction add et flush des repository : bonnes pratiques ?


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut utiliser la fonction add et flush des repository : bonnes pratiques ?
    Bonjour à tous,

    Dans mon projet en Symfony 5.4, je vois que pour mes entités, des fonctions add et remove ont été générées automatiquement dans les repository.

    Exemple pour mon entité user :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        public function add(User $entity, bool $flush = false): void
        {
            $this->getEntityManager()->persist($entity);
     
            if ($flush) {
                $this->getEntityManager()->flush();
            }
        }
     
        public function remove(User $entity, bool $flush = false): void
        {
            $this->getEntityManager()->remove($entity);
     
            if ($flush) {
                $this->getEntityManager()->flush();
            }
        }
    J'ai 2 entités, user et reservation, sans relation entre elles.
    Quand un user fait une réservation, j'écris le mail du user dans l'entité réservation.

    J'ai le code suivant dans un controller, pour gérer les users qui changent de mail, et ainsi impacter les réservations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        //... actions sur entité user
        $entitymanager->persist($user);
     
    	// si le mail a changé, modifier le mail des reservations
    	$ancien_mail = $email_user;
    	$nouveau_mail = $user->getEmail();
    	if ($ancien_mail != $nouveau_mail) {
    		$tab_reservation = $reservationRepository->SelectReservationMail($ancien_mail);
     
    		if (count($tab_reservation) > 0) {
    			foreach ($tab_reservation as $element_reservation) {
    				$id_reservation = $element_reservation->getId();
    				$entite_reservation = $reservationRepository->SelectReservation($id_reservation);
    				$entite_reservation->setEmail($nouveau_mail);
    				$entitymanager->persist($entite_reservation);
    			}
    		}
    	}
     
    	$entitymanager->flush();
    Ce code fonctionne, ma question concerne les persist et le flush.
    Dans mes repository, j'ai la fonction add. Si je modifie mon controller pour l'utiliser, est ce qu'il faut que je flush à chaque fois mon user et mes réservations dans ma boucle ?
    Ou comment, selon les bonnes pratiques, en passant par les repository, je peux faire les persist et qu'un flush final ?

    Merci d'avance pour votre aide !

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 435
    Par défaut
    Citation Envoyé par merou19 Voir le message
    J'ai 2 entités, user et reservation, sans relation entre elles.
    Bonjour,

    Tu sembles avoir un problème de conception à ce niveau : si les réservations sont liées aux utilisateurs, tu dois avoir une relation entre tes entités (utilises le maker pour t'aider à créer la relation).

    La duplication des données en bdd est également une mauvaise pratique : l'adresse mail de l'utilisateur ne devrait pas être renseignée dans la table reservation.
    En créant correctement la relation entre tes entités, tu n'auras pas ce problème de duplication et tu n'auras donc pas besoin de modifier l'adresse mail dans la table reservation en cas de changement.

    Concernant la fonction add :
    - soit tu définies le 2e paramètre $flush avec la valeur true pour exécuter un flush lors de l'appel de cette fonction (à éviter dans une boucle)
    - soit tu ne définies pas le 2e paramètre qui est par défaut à false, il faudra donc faire un flush final

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut
    Merci beaucoup pour tes explications et indications !

    Techniquement, je vois le principe, ok, il vaut mieux faire un flush final plutôt que dans chaque passage dans ma boucle.

    En effet, j'ai peut être un problème de conception, voilà ce que j'avais en tête à cette époque :
    Sur mon site, les visiteurs peuvent s'enregistrer, ce qui crée une ligne dans la table User.
    Quand ils créent une réservation, je fige les infos, dont le mail, dans la table Reservation, comme ça je conserve les données pour la facturation.
    Et le visiteur enregistré a un écran pour supprimer son user s'il le souhaite. Et pour être conforme au RGPD, j'ai une fonction qui supprime les users inactifs depuis un an.
    Ce principe me permet donc de garder les données de facturation, qui légalement doivent être conservées plus longtemps.
    Enfin, pour le RGPD, c'est ce que j'avais compris à l'époque, j'espère que je n'ai pas tout fait de travers...

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/12/2021, 17h13
  2. [WD-365] Utiliser la fonction DataFields("") pour créer des fichiers PDF
    Par PENSEUR33 dans le forum VBA Word
    Réponses: 9
    Dernier message: 30/09/2020, 16h08
  3. Réponses: 31
    Dernier message: 01/08/2014, 16h53
  4. [Drupal] Traduction des fields - Bonnes pratiques
    Par AurélienB dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 22/07/2013, 01h26
  5. [Conception] Utiliser les fonctions des tableaux ou plusieurs requêtes ?
    Par Derik dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 01/02/2006, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo