Formulaire et relation entre entités

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour à tous,

Voici ce que j'ai en entités:

Equipe

  • id

  • nom

Equipe_Match

  • equipe_id

  • match_id

  • score

Match

  • id

  • lieu

  • date

Comme vous pouvez le voir, j'ai une relation ManyToMany entre Equipe et Match. J'ai du faire 2 relation OneToMany puisque j'ai besoin de garder le score de chaque équipe par match séparement (et non une chaine "1 - 2").

Ce que j'aimerai faire c'est avoir un formulaire pour créer un match et y entrer le score. Donc 2 liste déroulantes (un matche c'est 2 équipe ni plus ni moins) pour choisir les équipes, une liste déroulante pour le lieu, un champ texte pour la date et 2 champs textes pour le score (un pour chaque équipe).

Le problème, c'est que je voudrais pouvoir différencier les équipes dans chacunes des listes par exemples avoir juste les équipes de l'Est dans une liste et les équipes de l'ouest dans l'autre. je sais qu'il est possible de faire une collection de formulaire, mais ça ne me donne pas cette souplesse.

Y a t-il une solution pour ça?

Merci

Édité par Freeza

+0 -0

Bonjour,

Personnellement j'aurais plutôt fait:

Equipe

  • id
  • nom

Match

  • id
  • lieu
  • date
  • equipe1_id
  • equipe2_id
  • score1
  • score2

Ce qui ne répond pas à la question, je ne suis d'ailleurs pas sur de l'avoir bien compris.

Mais si c'est ce que je pense tu peux rajouter un attribut dans la table équipe qui permet de renseigner si elle est de l'est ou l'ouest et ainsi afficher les équipes par liste en effectuant la requête adaptée.

Désolé si je suis à côté de la plaque…

+0 -0

Salut !

Je ne suis pas sûr de comprendre non-plus : quand tu parles d'équipe de l'Est et de l'Ouest, c'est par rapport au terrain ou une "vraie région géographique" ?

Dans le premier cas, tu peux ajouter un champ "côté" dans ton entité Equipe_Match afin de spécifier ça, ou alors passer à la représentation proposée ci-dessus, "equipe_1" représentant l'équipe de l'est, par exemple.

Pour filtrer les listes d'un type de champ entity en fonction d'un critère, il y a l'option query_builder, qui prend une closure, dans ce genre-là :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?php
->add('monChamp1', 'entity', array(
    // … les paramètres "standard"
    'query_builder' => function (EntityRepository $er) {
        $qb = $er->createQueryBuilder('e');
        return $qb->where($qb->expr()->eq('e.region', 'est');
    }
),
->add('monChamp2', 'entity', array(
    // … les paramètres "standard"
    'query_builder' => function (EntityRepository $er) {
        $qb = $er->createQueryBuilder('e');
        return $qb->where($qb->expr()->eq('e.region', 'ouest');
    }
)

Édité par Ymox

Evitez qu'on vous dise de les lire : FAQ PHP et Symfony 2Tutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+0 -0
Auteur du sujet

Enfaite j'ai oublié dans l'entité Equipe, j'ai bien un champs region (Est, Ouest). Ceux sont bien des régions et non pas juste le côté du terrain.

Ymox, pour faire ceci, j'ai besoin d'avoir dans mon entité "monChamp1" et "monChamp2" non ? A moins que je fasse comme l'a écrit cariopes. Mais du coup j'ai l'impression que c'est moins logique que de faire un vrai ManyToMany.

+0 -0

Après réflexion, un match est toujours entre deux équipes, donc même si du point de vue organisation rationnelle des données, cette OneToManyToOne entre Match, Equipe_Match et Equipe est logique, elle pose justement ce problème que si tu as une collection, ça devient moins facile de gérer le fait que "un objet de cette collection doit avoir ces propriétés, l'autre celles-ci". Cela veut dire que ta collection est toujours initialisée avec deux éléments, un pour les équipes de l'est, l'autre pour celles de l'ouest. Et du coup, pourquoi ne pas simplement avoir, comme le propose cariopes, une entité qui a directement deux champs, un pour l'entité de chaque "côté", et ainsi pouvoir aisément filtrer sur leur provenance ? Tu sauras très rapidement laquelle est laquelle si tu nommes tes champs de manière judicieuse, parce qu'avec une collection, c'est pas garanti que l'ordre dans lequel tu récupéreras les deux équipes sera le bon ni le même à chaque fois.

Evitez qu'on vous dise de les lire : FAQ PHP et Symfony 2Tutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+1 -0
Auteur du sujet

En gros une équipe est soit de l'est soit de l'ouest? Et elle ne peux jouer contre une équipe de la même région?

cariopes

Oui c'est bien ça.

Après réflexion, un match est toujours entre deux équipes, donc même si du point de vue organisation rationnelle des données, cette OneToManyToOne entre Match, Equipe_Match et Equipe est logique, elle pose justement ce problème que si tu as une collection, ça devient moins facile de gérer le fait que "un objet de cette collection doit avoir ces propriétés, l'autre celles-ci". Cela veut dire que ta collection est toujours initialisée avec deux éléments, un pour les équipes de l'est, l'autre pour celles de l'ouest. Et du coup, pourquoi ne pas simplement avoir, comme le propose cariopes, une entité qui a directement deux champs, un pour l'entité de chaque "côté", et ainsi pouvoir aisément filtrer sur leur provenance ? Tu sauras très rapidement laquelle est laquelle si tu nommes tes champs de manière judicieuse, parce qu'avec une collection, c'est pas garanti que l'ordre dans lequel tu récupéreras les deux équipes sera le bon ni le même à chaque fois.

Ymox

Effectivement, c'est bien plus simple de le faire comme l'a fait cariopes, je vais surement opté pour cette solution.

Merci

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte