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

Doctrine2 PHP Discussion :

remove [2.x]


Sujet :

Doctrine2 PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    septembre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : septembre 2018
    Messages : 32
    Points : 27
    Points
    27
    Par défaut remove
    Bonjour,

    J'ai un pb que je n'arrive pas à résoudre, j'essaie de faire un remove, mais rien ne se passe, le traitement passe bien dessus, mais semble l'ignorer et aucune anomalie n'est remonté.
    Je pense que cela vient du ManyToOne, mais je ne sais comment faire!

    mon FicheSuivicontroller
    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
    21
    22
    23
    24
    25
    26
    27
     
        public function ValiderSaisie(FicheSuiviRepository $em, ObjectManager $manager) // Validation des fiches de suivi
        {
            // On passe les fiches en valide
            // On supprime les fiches vides
            $listeFicheSuivi = $em->toutesFichesEnregistreNonValide();
            foreach($listeFicheSuivi as $ficheSuivi){
                if($ficheSuivi->getDeplacement() == null &&
                    $ficheSuivi->getAbsence() == null && 
                    $ficheSuivi->getActivite() == null && 
                    $ficheSuivi->getChantier() == null){
                    // On supprime la fiche vide
                    $manager->remove($ficheSuivi);
                    $manager->persist($ficheSuivi);
                }
                else{
                    // On valide la fiche
                    $ficheSuivi->setValide(true);
                    $manager->persist($ficheSuivi);
     
                }
            }
            $manager->flush();
            return $this->render('fichesuivi/message.html.twig', [
                'message' => "Validation des fiches réalisée avec succès"
                ]);
        }
    mon entité FicheSuivi pour la partie intervenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        /**
         * @ORM\ManyToOne(targetEntity="App\Entity\Intervenant", inversedBy="ficheSuivis")
         * @ORM\JoinColumn(nullable=false)
         */
        private $intervenant;
    Mon entité Intervenant pour la partie FicheSuivi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        /**
         * @ORM\OneToMany(targetEntity="App\Entity\FicheSuivi", mappedBy="intervenant")
         */
        private $ficheSuivis;

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2011
    Messages : 350
    Points : 580
    Points
    580
    Par défaut
    Salut,

    Est-ce que tu est certain que l'exécution passe bien dans le if où tu fais le remove à chaque tour de boucle ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    septembre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : septembre 2018
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Tout à fait, j'ai mis des dump() pour vérifier le circuit et il n'y a pas de choix, c'est soit valide() = true ou remove.
    J'ai tordu le truc dans tous les sens et je ne comprend pas.
    En fait il y a beaucoup de choses que je comprend pas

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2011
    Messages : 350
    Points : 580
    Points
    580
    Par défaut
    Est-ce qu'il ne faut pas plutôt utiliser l'EntityManager ($em) à la place de ton ObjectManager ($manager) pour faire les remove, persist et flush ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    septembre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : septembre 2018
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    je viens de tester et cela ne fonctionne pas
    j'ai remplacé ObjectManager par EntityManager et voilà le message :

    Cannot autowire argument $manager of "App\Controller\FicheSuiviController::ValiderSaisie()": it references class "Doctrine\ORM\EntityManager" but no such service exists. Try changing the type-hint to one of its parents: interface "Doctrine\ORM\EntityManagerInterface", or interface "Doctrine\Common\Persistence\ObjectManager".

    Il semblerait qu'il faille utiliser ObjectManager

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    mai 2008
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 1 575
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour!

    Je ne comprends pas ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $manager->remove($ficheSuivi);
    $manager->persist($ficheSuivi);
    Pourquoi supprimer, puis sauvegarder le même objet?

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    mai 2008
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 1 575
    Points : 2 441
    Points
    2 441
    Par défaut
    remove met l'objet dans la liste des éléments à supprimer, persist le remet dans la liste des éléments gérés. Le résultat est que rien ne change.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    septembre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : septembre 2018
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    IMPECCABLE

    J'avais mal compris le persist qui pour moi "enregistrait" la modification en base avant le flush() qui commitait le tout. Maintenant tout marche super
    Je ne me ferais plus avoir avec ça

    Encore un grand merci.

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    mai 2008
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 1 575
    Points : 2 441
    Points
    2 441
    Par défaut
    Et pour compléter vu les remarques plus haut, il vaut mieux injecter EntityManagerInterface (le conteneur ne connaît pas EntityManager, il ne connaît que l'interface) plutôt que ObjectManager. Les deux font la même chose mais ObjectManager est une interface généraliste alors qu'EntityManagerInterface possède des méthodes supplémentaires relatives aux BDD relationnelles, vu qu'il est au niveau de l'ORM alors que ObjectManager est une couche au-dessous et ne devrait être utilisé que si tu envisages de remplacer éventuellement MySql/Postgres par MongoDB par exemple.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    septembre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : septembre 2018
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    OK, merci pour la remarque

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] listview remove
    Par betaphp dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/12/2005, 13h11
  2. remove non letters
    Par siham_06 dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2005, 22h36
  3. macro=remove des lignes d un fichier xls et reorga
    Par af_airone dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/10/2005, 15h08
  4. problème de remove
    Par c_Linoa dans le forum C++
    Réponses: 13
    Dernier message: 28/04/2005, 11h21
  5. [debutant] remove() pourri?
    Par JulienDuSud dans le forum Windows
    Réponses: 4
    Dernier message: 05/12/2004, 17h31

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