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

 PHP Discussion :

Suppression de données entity relation ManyToMany


Sujet :

PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut Suppression de données entity relation ManyToMany
    Bonjour à tous,

    Je suis débutant sur Symfony et après avoir suivi quelques tutoriaux, je travaille sur un projet afin de me perfectionner!

    Il s'agit d'un gestionnaire d'évènements avec inscriptions des participants avec un back-office. En tant que visiteur, je peux m'inscrire à un ou plusieurs évènements via une select list d'un formulaire bootstrap.
    Une fois inscrit, l'administrateur peut accéder à son back-office et voir qui s'est inscrit dans tel ou tel évènement en sélectionnant un évènement précis et d'y consulter la liste.

    Mon problème, qui me semble pourtant très bête, est que si l'administrateur décide de supprimer un participant d'un évènement, le participant est supprimé dans la base de donnée et donc de tous les évènements auxquels celui-ci s'est inscrit. Alors que j'aimerais qu'il ne soit supprimé que de l'évènement en question.

    Pour moi, je pense que je dois créer une requête dans le fichier repository de mon évènement...

    Voici quelques parties du code que je pense être utile.

    Mon Entity Participant.php qui possède donc une relation ManyToMany :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        /**
         * @ORM\ManyToMany(targetEntity="App\Entity\Atelier", inversedBy="participants")
         */
        private $workshops;
    Et mon Entity Atelier.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        /**
         * @ORM\ManyToMany(targetEntity="App\Entity\Participant", mappedBy="workshops")
         */
        private $participants;
    Et dans l'un de mes Controller, voici la fonction qui supprime le participant de tous les évènements donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        /**
         * @Route("/admin/delete_participant/{id}", name="delete_participant")
         */
        public function deleteParticipant(EntityManagerInterface $manager, Participant $participant) {
     
            $manager->remove($participant);
            $manager->flush();
     
            $this->addFlash('danger', "Le participant a bien été supprimé");
     
            return $this->redirectToRoute("admin_page", [
                'participant' => $participant,
            ]);
        }
    C'est vraiment au niveau de la requête que je dois créer où je bloque...

    Pourriez-vous me donner un petit coup de main s'il vous plaît ?

    Merci d'avance!

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Si c'est du manytomany il manque les @ORMJoinTable

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut
    Bonjour MaitrePylos,

    J'avais un peu lu concernant les @ORMJoinTable mais donc d'après toi, c'est bien vers cela que je dois aller...
    Je ne connais pas du tout comment ça fonctionne mais je vais creuser!

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Oui car Sf, n'est pas la base de données et ne sait pas ce qu'il faut faire.?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut
    Apparemment je devrais remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /**
         * @ORM\ManyToMany(targetEntity="App\Entity\Atelier", inversedBy="participants")
         */
        private $workshops;
    par quelque chose comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    * @ORM\JoinTable(name="participant_atelier",
         *         joinColumns = {@ORM\JoinColumn(name="participant_id", referencedColumnName="id", onDelete="CASCADE")},
         *         inverseJoinColumns={@ORM\JoinColumn(name="atelier_id", referencedColumnName="id")}
         *      )
    private $workshops;
    Donc en gros, je devrais utiliser le JoinTable sur la table participant_atelier qui contient les relation entre les id uniquement...

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    en fait il faut les deux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
         /**
         * @ORM\ManyToMany(targetEntity="App\Entity\Atelier", inversedBy="participants")
         *  @ORM\JoinTable(name="participant_atelier",
         *         joinColumns = {@ORM\JoinColumn(name="participant_id", referencedColumnName="id", onDelete="CASCADE")},
         *         inverseJoinColumns={@ORM\JoinColumn(name="atelier_id", referencedColumnName="id")}
         *      )
         */
    private $workshops;

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/04/2017, 16h06
  2. Réponses: 0
    Dernier message: 09/05/2016, 11h47
  3. [AC-2007] Construction des relations avec importation et suppression des données.
    Par SaiyaHiruma dans le forum Access
    Réponses: 1
    Dernier message: 03/05/2014, 00h02
  4. Doctrine2 relation ManyToMany : suppression
    Par laville dans le forum Doctrine2
    Réponses: 0
    Dernier message: 29/03/2013, 15h44
  5. Suppression de données
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/12/2004, 15h25

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