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 :

Relation sur une meme table


Sujet :

Doctrine2 PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut Relation sur une meme table
    Bonjour,

    Voici mon souci :

    J’ai fait un CRUD sur une table qui possède une relation sur elle même.

    Exemple : une table catégorie qui peut avoir des parents.

    Je vais sur mon Template pour ajouter des catégories et j’en ajoute une.
    Logiquement, si j’en ajoute une deuxième, je devrais avoir dans ma liste déroulante des parents, l’id de la première. Hors ce n’est pas le cas.

    Pourtant j’ai bien mis l’annotation dans mon Entity car dans phpmyadmin si j’ajoute des catégories j’ai bien une liste déroulante parent avec la sélection de l’id.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /**
    * @ORM\OneToOne(targetEntity="Category")
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
    */
    private $category;
    De plus je ne voudrais pas afficher l’id mais le nom de la catégorie c’est plus parlant. Je n’arrive plus a retrouver la commande qui permet de dire que l’on fait <option value=$ID> $libelle</option>( il me semble que je l’avais déjà fait sur symfony1.4 mais plus moyen de mettre la main dessus)

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Bon je viens etoffer mon sujet

    J'ai reussi a faire ce que je veux c'ets a dire une relation sur la même entité.

    Le problème est le suivant :

    Quand j'ajoute une catégorie pour la première fois ma liste deroulante pour les catégories parentes est vide (logique je n en ai pas créé)

    Si j'ajoute une catégorie pour le seconde fois ma liste des catégories parentes ce met par défaut sur la première catégorie et impossible de la deselectionner.
    Je me suis dit je vais mettre une required false comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->add('parent', 'choice', array('required' => false ))
    Mais la la liste déroulante ne retourne plus aucun résultat.


    Comment faire ?

    Merci

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    bonjour,
    utilises plutot un champ de type entity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ->add('parent', 'entity', array('required' => false,'class'=>'MyAppBundle:Category' ))
    http://symfony.com/doc/current/refer...es/entity.html

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Super ca fonctionne merci

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Euh en revanche tu n'as pas un moyen de personnaliser un peu ça. Je m'explique:

    La liste déroulante parent me retourne toutes les catégories.

    Exemple :

    Toto
    Tata
    Titi

    je peux donc mettre par exemple Toto --> (parent) Tata ou Tata --> Titi

    En revanche je peux mettre Tata--> Tata ça n'a pas d’intérêt et je voulais savoir si on pouvait afficher toutes les valeurs sauf celle qui est en court de modification.

    Merci

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    utilises l'option query_builder

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Merci de ta réponse

    J’ai regardé un peu mais on va dire que je ne comprends pas trop ta réponse.

    Peux-tu développer un peu plus stp ?

    Je t’en remercie

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    ça pourrait resembler à cela
    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
     
    //My/Bundle/Form/CategoryType
    public function buildForm($builder,$options){
     $parentOptions=array('required' => false,'class'=>'MyAppBundle:Category');
     
      //s'il s'agit d'un formulaire de modification d'une entité on va personaliser la requete de récupération
      //NB par défaut c'est la méthode findAll qui est utilisée
      if( ($category=$builder->getData()) &&(category->getId())){
        $parentOptions['query_builder']=function($categoryRepository )use($category){
                                             return $categoryRepository->createBuilder('c')
                                                                                 ->where('c.id !=:currentId')
                                                                                 ->setParameter('currentId',$category->getId());
        };
      };
     
      $builder->add('parent', 'entity', $parentOptions)
    }
    je pense que ce code marche, cependant la doc officielle propose plutôt l'utilisation d'un listener
    http://symfony.com/doc/2.0/cookbook/...eneration.html

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

Discussions similaires

  1. 2 jointures sur une meme table
    Par amamildor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/10/2007, 17h24
  2. 2 requete sur une meme table en une seule
    Par Nizarazu dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/08/2006, 21h03
  3. [MySQL] Plusieurs jointures sur une même table
    Par stephyyr dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2006, 14h24
  4. DOUBLE REQUETE SUR UNE MEME TABLE
    Par MORAS dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/01/2006, 13h40
  5. Association 1:n sur une meme table
    Par dafalcon dans le forum Décisions SGBD
    Réponses: 15
    Dernier message: 27/04/2005, 09h07

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