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 :

Liaison Many to Many [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 74
    Par défaut Liaison Many to Many
    Bonjour,

    J'ai un petit problèmes avec synfony et l'admin generator.
    J’essaie de faire une liaison Many to Many mais je ne comprend pas exactement l'erreur obtenu.

    J'ai une table recyclage, une table département et une table recyclage_departement. Le but est de pouvoir lié plusieurs département à chaque recyclage dans l'admin generator.

    J'ai créé les clé étrangères :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE `recyclage_departement`
      ADD CONSTRAINT `fk_departement` FOREIGN KEY (`idDepartement`) REFERENCES `departement` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
      ADD CONSTRAINT `fk_recyclage` FOREIGN KEY (`idRecyclage`) REFERENCES `recyclage` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;

    Et modifier mon fichier generator.yml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            display: [nom, siteweb, idrecyclage]
            fields:
              idrecyclage: { type: admin_check_list, params: through_class=RecyclageDepartement }
    Pour infos voici mon fichier schema :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    Departement:
      connection: doctrine
      tableName: departement
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        nom:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        numero:
          type: string(1)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        article:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        RecyclageDepartement:
          local: id
          foreign: iddepartement
          type: many
     
    Recyclage:
      connection: doctrine
      tableName: recyclage
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        nom:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        siteweb:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        RecyclageDepartement:
          local: id
          foreign: idrecyclage
          type: many
     
     
    RecyclageDepartement:
      connection: doctrine
      tableName: recyclage_departement
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        iddepartement:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        idrecyclage:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        Recyclage:
          local: idrecyclage
          foreign: id
          type: one
        Departement:
          local: iddepartement
          foreign: id
          type: one
    Lors de l’édition j'ai l'erreur "Widget "idrecyclage" does not exist."

    Quelqu'un sait comment je dois nommer le champ ou me guider, le tutoriel officiel n'est pas très étoffé par les relations Many to Many.

    Merci de votre aide.

  2. #2
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    http://www.doctrine-project.org/proj...s:many-to-many

    Regarde ce lien, tu as une petite erreur dans le shema.yml, le many to many ce déclare sur la table de jointure.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 74
    Par défaut
    Merci pour ton aide.

    En effet lorsque je modifie mon schema.yml à la main tous fonctionne.
    Mais dès que je fais un "symfony doctrine:build-schema" tous est annulé, n'y à t'il pas un autre moyen plus que de toucher au fichier générer automatiquement ?


    EDIT :
    Dans l'exemple donné je ne comprend pas pourquoi la classe User n'a pas de relations:
    Quelqu'un à une explication ?

  4. #4
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    Non il y a pas vraiment le choix que de le faire à la main. la permet de te faire gagner du temps mais il faut que tu termine à la main pour finaliser et spécifier certains paramètres.

    Tu peux en écrire aussi c'est la version "Verbose Syntax", c'est plus à ta guise personnellement, j'utilise cette version quand j'ai peu de champs et de table sinon moins il y a de ligne et plus je suis content ^^.

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

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 74
    Par défaut
    Merci de ton aide, mais toucher aux fichiers auto généré c'est mal :p

    Du coup j'ai inspecté les sources générés est en modifiant simplement mon fichier "Recyclage.class.php" :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Recyclage extends BaseRecyclage
    {
    	public function setUp()
        {
            parent::setUp();
            $this->hasMany('Departement', array(
                 'refClass' => 'RecyclageDepartement',
                 'local' => 'idRecyclage',
                 'foreign' => 'idDepartement'));
        }
    }

    Tous fonctionne à merveille, mon fichier schema est inchangé mais les filtres et formulaires se sont adaptés.

  6. #6
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    C'est le mal pour la génération des forms et des filters mais pas pour le fichier schema.yml car normalement c'est à la main qu'il faut le faire.

    En plus tu as des outils un peu mieux pour générer le fichier schema.yml comme mysqlworkbench et le plugin doctrine.

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

Discussions similaires

  1. récupération entité avec liaison many to many
    Par Texicitys dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/06/2013, 12h18
  2. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  3. [hibernate 3] mapping many-to-many
    Par darkyspirit dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/12/2006, 19h37
  4. [EJB2.1 Entity] [XDoclet][JBoss] CMR - Many to Many Relation
    Par dauggui dans le forum Java EE
    Réponses: 4
    Dernier message: 24/04/2006, 11h45
  5. [hibernate]relation many-to-many
    Par quilo dans le forum Hibernate
    Réponses: 5
    Dernier message: 20/12/2005, 10h07

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