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 :

Lier plusieurs fois des entités entre elles [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut Lier plusieurs fois des entités entre elles
    Bonsoir, j'ai 2 entités liées par une relation M2M, et je souhaiterai mettre une quantité dans cette relation. cad : dire qu'elles sont liées 10 fois.

    existe-t-il une facon de faire cela ou dois-je réellement créer 10 liens entre elles ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Je souhaite tout simplement relier plusieurs fois mon entitéA('id'=1) avec mon entitéB('id'=1) par exemple. dois-je simplement faire plusieurs fois la liaison dans la table ou y-a-t-il une autre solutions ?

    Pour faire plusieurs fois cela je dois simplement créer un champ en plus dans ma vue twig pour spécifier le nombre de fois que je souhaite les liés ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Bonsoir,
    J'ai opté pour:
    Avoir 3 entités:
    Forfait // Presta // QuttPrestaForfait
    Mettre 2 relations:
    Forfait (One) <==> QuttPrestaForfait (Many)
    Presta (One)<==> QuttPrestaForfait (Many)

    Je souhaite maintenant construire un formulaire permettant lors de la création d'un forfait de le lier à ou pas a toutes mes prestations et d'en spécifier la quantité qui est un attribut de QuttPrestaForfait.
    Une petite idée des étapes et du formType que je dois construire ?

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    J'ai plus ou moins rencontré le même problème. Dans mon cas il était question de badges.
    On peut créer par exemple un badge "foo" et ensuite le distribuer à des clients.
    Au départ je me suis dis comme toi, je crée un badge et les gens peuvent le collecter plusieurs fois. Et la, même problème, la relation m2m impose l'unicité du couple (user_id, badge_id).
    En y regardant mieux, je me suis dis que cette unicité était logique et que je ne devais pas essayer de la contourner. C'est un peu comme dans la vrai vie je ne peux pas recevoir en cadeau 2 fois le même badge, mais par contre je peux recevoir 2 "instances" d'un même modèle de badge.
    J'ai donc changé mes classes pour avoir une classe "BadgeModel" qui définit les caractéristiques de mon badge et une classe "BadgeInstance" qui est en fait le badge lui même que je donne à mon utilisateur.
    On a une relation 1to1 de "BadgeInstance" avec "BadgeModel" et une autre 1to1 de "BadgeInstance" vers "User"

    Par exemple je peux avoir dans ma bdd 2 entités "BadgeModel" qui sont un peu mes "moules" pour fabriquer mes "BadgesInstances". Disons le "BadgeModel" or et argent.

    Ensuite chaque entité de "BadgeInstance" sera soit de "BadgeModel" or ou argent. Je peux donc créer 10 entités "BadgesInstance" de type "BadgeModel" or et les donner au même utilisateur (puisque les id vont être différentes)

    J'espère que je me suis pas trop perdu dans mes explications, en tout cas c'est seulement mon point de vue donc si t'as des remarques/améliorations elles sont les bienvenues

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Merci pour ta réponse enrichissante. Je ne fais pas tout a fait pareil.
    J'ai créé le champ Qutt dans l'entité QuttPrestaForfait,
    Un peu comme si dans ton entité BadgeInstance
    tu avais un champ(attribut) Qutt
    et au lieu de recréer des badgemodel pour avoir plusieurs id differentes pour le meme model et bien je compte incrémenté le champ(attribut) Qutt.

    Mais je n'arrive pas a créer un formulaire adéquat.
    Je souhaiterai un formulaire:
    Dans une premiere partie permette de créer le forfait(titre commentaire) et dans la seconde partie de le lier avec les presta et de pouvoir mettre la qutt de chaque presta.

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    Tu n'est pas obligé de créer un formulaire à partir d'une entité, tu peux très bien faire le formulaire (FormType) que tu veux et ensuite au lieu de persister les données tu les récupère et les passe à une classe manager qui elle s'occupe de créer les entités correspondantes.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Tu veux dire le faire en 2 fois d'abord le forfait et ensuite les liens avec les presta

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Bon je suis partis sur un truc bancale:
    -je construit 2 formulaires dans la meme page. (reste a voir si je peux récupérer les deux a la soumission d'un seul ...)
    -je flush mon forfait et ensuite je finis de remplir mon deuxieme formulaire pour le flush.

    Hum.

    Voici le départ de mon controleur:
    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
    28
    29
    30
    31
    32
    33
        public function newAction()
        {
            $forfait = new Forfait();
            $form = $this->createForm(new ForfaitType, $forfait);
            $quttprestaforfait = new QuttPrestaForfait();
            $formqtt = $this->createForm(new QuttPrestaForfaitType, $quttprestaforfait);
     
            $request = $this->get('request');
            if ($request->getMethod() == 'POST') {
              $form->bind($request);
              if ($form->isValid()) {
                $em = $this->getDoctrine()->getManager();
                $em->persist($forfait);
            ////////
            /* Il faudrait que je flush mon forfait et que je recupère l'id */
            ////////
              foreach()
              {
                $quttprestaforfait->setForfait($id);
              }
              $formqtt->bind($request);
              if ($form->isValid()) {
                $em = $this->getDoctrine()->getManager();
                $em->persist($quttprestaforfait);
            ////////
     
                $em->flush();
                $this->get('session')->getFlashBag()->add('info', 'forfait');
                return $this->redirect($this->generateUrl('presta_admin_all_forfait'));
                }
              }
            return $this->render('SBPrestaBundle:ForfaitAdmin:newforfait.html.twig', array('form' => $form->createView()));
        }

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Rooo je tourne en rond, j'ai beau lire relire:
    http://symfony.com/fr/doc/current/book/forms.html
    http://symfony.com/fr/doc/current/re...ollection.html
    http://symfony.com/fr/doc/current/co...llections.html

    Donc je réexplique mon but: créer des forfaits a partir de prestations existantes et qui peuvent ne pas etre unique dans un forfait et seulement dans un seul forfait.
    Pour cela j'ai créé 3 entités:
    Forfait//Presta//prestaForfait
    Prestaforfait étant destinée a spécifier la quantité d'une prestation dans un forfait.

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

Discussions similaires

  1. Comment lier des dropdownlist entre elles ?
    Par Laugeek dans le forum ASP.NET
    Réponses: 3
    Dernier message: 16/06/2010, 17h48
  2. Comment lier en Flash des listes entre elles ?
    Par cega68 dans le forum Flash
    Réponses: 0
    Dernier message: 23/12/2008, 09h12
  3. comparer des dates entre elles
    Par cyrano_de_bergerac dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 07/06/2007, 15h39
  4. Positionnez des images entre elles :
    Par pierreonxbox dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 15/05/2007, 08h50
  5. [div][scrollbar]lier les barres de défilement entre elles
    Par snoop dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 23/02/2006, 16h59

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