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 :

DELETE depuis OneToMany [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre chevronné Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Par défaut DELETE depuis OneToMany
    Bonjour à tous !

    Je dispose d'une entité Post qui est en OneToMany avec une entité Values qui est en ManyToOne. Tout fonctionne parfaitement excepté au moment ou je veux effacer un post. Je ne peux apparemment pas effacer depuis un enfant sauf que dans la logique des tables, un post peut contenir plusieurs valeurs et plusieures valeurs peuvent appartenir à plusieurs post !

    Comment puis-je faire ? ça m'étonnerait que symfony n'ait pas prévu le coup !

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Par défaut
    Bonjour,

    si tu souhaites supprimer ton post et toute ses values associé depuis l'objet post, tu dois pour cela supprimer avec la méthode remove() de ton ManyToOne qui se trouve dans ton entity post.

    n'oublie pas la boucle pour toute les valeurs.

    Cordialement

  3. #3
    Membre chevronné Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Par défaut ...
    Voici mon action delete qui m'interdit toujours d'effacer les valeurs associées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function delAction($id)
        {
            $em = $this->getDoctrine()->getManager();
            $post = $em->getRepository('AdminBundle:Post')->find($id);
     
            $values = new FieldPostValue();
            $post->removeFieldsPostsValue($values);   
     
            $em->remove($post);
            $em->flush();            
     
        }
    Merci de m'avoir confirmé que c'était possible d'y arriver, l'espoir fait vivre

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Par défaut
    fais un findAll() sur ton entity value et boucle l'object post pour à chaque ligne value post remove chaque ligne

    ou un findBy(array("ton foreign key"))

    ou fait un foreach sur post.NomDeTonChampKey

  5. #5
    Membre chevronné Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Par défaut Génial merci !
    T'es un boss !

    Voici le code de mon delAction

    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
     
    public function delAction($id)
        {
            $em = $this->getDoctrine()->getManager();
            $post = $em->getRepository('AdminBundle:Post')->find($id);
     
            if(!$post) 
                throw $this->createNotFoundException('Aucun post trouvé pour cet id : '.$id);   
     
            $values = $em->getRepository('AdminBundle:FieldPostValue')->findBy(array('post' => $id));
            foreach($values as $value)
            {
                $post->removeFieldsPostsValue($value);
                $em->remove($value);
            }
     
            $em->remove($post);
            $em->flush();            
     
            return $this->redirect($this->generateUrl('posts'));
        }

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Par défaut
    Et c'est bon c'est résolu?

  7. #7
    Membre chevronné Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Par défaut Nickel
    Tout est good !

    Merci encore !

  8. #8
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Par défaut
    tu peux aussi faire un foreach direct sur post.attribute vers entity valeur

  9. #9
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,

    Un "ON DELETE CASCADE" au niveau de la base de données donnera également de bon résultats non ?

    pour l'inclure dans le mapping Doctrine: http://doctrine-orm.readthedocs.org/...tml#joincolumn

  10. #10
    Membre chevronné Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Par défaut
    Dans ton exemple, il s'agit d'un OneToOne et non d'un OneToMany !

  11. #11
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Dans ton exemple, il s'agit d'un OneToOne et non d'un OneToMany !
    Un exemple est fait pour être adapté !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //entité Value
    /**
    *
    * @ORM\ManyToOne(targetEntity="Post", inversedBy="values")
    * @ORM\JoinColumn(onDelete="cascade")
    */
    private $post;
    suivi d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    app/console doctrine:schema:update --force

  12. #12
    Membre chevronné Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Par défaut
    Attention, je crois qu'il y a une différence entre un ManyToOne et un OneToMany !

  13. #13
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Par défaut
    oui il peut aussi cascade les remove du manytoone en ce callant sur le one to many aussi.
    il peut aussi passer par une requete dql ou sql en repository.
    tout comme il peut aussi passer par les pre et postremove.

    D'ailleur à ce sujet je souhaiterais des infos car je cale sur les callback à savoir:

    Ce que je persist dans le controller je peux le faire via une methode de mon entity en prePersist ou preUpdate ou preRemove donc à quoi bon les callbacks je me demande?

    Merci

  14. #14
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Par défaut
    je te conseil le bundle kint ou ladybug pour check ce que tu fais (dump globals etc...)

    kint plus complet à mon gout

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

Discussions similaires

  1. [Débutant] Appeler méthode Delete d'un objectDataSource depuis l'évenement Click
    Par Alexandre le Grand dans le forum Entity Framework
    Réponses: 1
    Dernier message: 13/03/2014, 23h33
  2. Réponses: 1
    Dernier message: 24/07/2010, 14h09
  3. Réponses: 2
    Dernier message: 14/02/2008, 15h02
  4. [CR][VB6] Impression d'un état depuis VB
    Par sda dans le forum SDK
    Réponses: 3
    Dernier message: 06/02/2007, 18h27
  5. Réponses: 1
    Dernier message: 22/08/2002, 18h00

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