Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Doctrine] Problème création de table

Symphony, doctrine, mysql

Sujet résolu
    25 novembre 2010 à 20:19:39

    Bonsoir,

    Alors voila mon fichier YAML :

    InterSiteCategorieInformation:
    columns:
    id_site: { type: integer, notnull: true }
    id_categorie_information: { type: integer, notnull: true }
    relations:
    Site: { onDelete: CASCADE, local: id_site, foreign: id }
    CategorieInformation: { onDelete: CASCADE, local: id_categorie_information, foreign: id }
    options:
    primary: { id_site, id_categorie_information }

    Je cherche simplement a faire une table "d'intersection" contenant 2 champs qui références 2 clés primaires de deux tables différentes.
    Autrement dit, ma table InterSiteCategorieInformation devrait posséder 2 champs avec une clé primaire composée des 2 champs (renseignés dans "options")

    Mais quand je lance la création de table avec doctrine, et qu'ensuite je vais voir ma table avec phpMyAdmin, je vois que ma table possède 3 champs, mes 2 champs et un champs en auto_increment (que je ne veux pas...) et d'ailleurs ma clé n'est même pas composées :x

    Quelqu'un peut m'aider? =/

    PS : Je débute avec Symfony donc je galère un peu pour l'instant ^^'

    Merci,


    EDIT:

    Avec quelque recherches sur le net, j'ai trouvé une solution, il suffit de faire ceci (pour ceux qui chercherais la même chose que moi...):

    InterSiteClasse:
    columns:
    id_site: { type: integer, notnull: true }
    id_classe: { type: integer, notnull: true }
    relations:
    Site: { onDelete: CASCADE, local: id_site, foreign: id }
    Classe: { onDelete: CASCADE, local: id_classe, foreign: id }
    indexes:
    refindice: { fields: [ id_site, id_classe ], type: unique }

    Petit hic, il y a quand même la création d'un champs autoincrémenté (champs en clé primaire) mais je ne sais pas comment faire pour l'empêcher de le créer.
    Peut être que Mysql à besoin d'un champs primaire dans une table pour faire ses recherches?

    Si jamais vous trouvez la solution à cela ou si vous avez plus d'infos, je suis preneur ;)

    Voila le lien où j'ai trouvé la solution (post #8) : http://www.developpez.net/forums/d9370 [...] -fixture-yml/
    • Partager sur Facebook
    • Partager sur Twitter

    https://valoperf.com/ - Analyze your skill on Valorant (Riot Games)

    Anonyme
      25 novembre 2010 à 21:04:11

      Ouais.... même solution ici:
      http://melikedev.com/2009/12/09/symfon [...] elationships/

      Doctrine a l'air aussi bien que CakePHP à ce niveau là dis-donc...
      Image utilisateur
      • Partager sur Facebook
      • Partager sur Twitter
        25 novembre 2010 à 21:19:25

        Oulala, trop technique pour moi :x

        Mais si d'autre peuvent comprendre ;p

        ---------------------

        EDIT :

        Bon, en gros, si j'ai bien compris, voila comment on doit faire:

        Site:
        columns:
        id: { type: integer, notnull: true, primary: true, autoincrement: true }
        nom: { type: string(50), notnull: true, unique: true }
        image: { type: string(100) }
        adresse: { type: string(100), notnull: true, unique: true }
        lien_mort: { type: boolean, notnull: true }
        description: { type: string(4000) }
        note: { type: float, notnull: true }
        nb_fois_note: { type: integer, notnull: true }
        nb_clic: { type: integer, notnull: true }
        relations:
        Classes: { class: Classe, local: id_site, foreign: id_classe, refClass: InterSiteClasse }
        Types: { class: TypeSite, local: id_site, foreign: id_type, refClass: InterSiteType }
        CategoriesInformations: { class: CategorieInformation, local: id_site, foreign: id_categorie_information, refClass: InterSiteCategorieInformation }


        Classe:
        columns:
        id: { type: integer, notnull: true, primary: true, autoincrement: true }
        nom: { type: string(30), notnull: true, unique:true }
        relations:
        SitesClasse: { class: Site, local: id_classe, foreign: id_site, refClass: InterSiteClasse }


        InterSiteClasse:
        columns:
        id_site: { type: integer, notnull: true, primary: true }
        id_classe: { type: integer, notnull: true, primary: true }


        Voila, en faisant ca, on obtient bien une table de liaison entre les deux tables :)
        Je sais, c'est écrit sur le site/blog mais c'est un exemple concret pour ce qui aurait beaucoup de mal à comprendre le site ou il y a la solution.

        Cette solution permet de corriger le bug de le champs auto incrémentés mis automatiquement lors de ma solution dans le 1er post :)
        De plus, avec cette méthode, on peut voir sur phpMyAdmin que même lui (phpMyAdmin) souligne les 2 champs, ce qu'il veut dire que c'est bien une clé primaire composée!! :D

        En espérant que ca aidera d'autre gens :)

        Question IMPORTANTE:

        Est-ce que avec cette solution on à le "ON DELETE CASCADE" toujours d'activé? Sinon, où dois-je rajouter l'option? Dans toutes les "relations"?

        EDIT après test:
        Apparemment non car j'ai fait les test et lorsque je supprime une Classe, il me dit que c'est impossible car il y a une référence vers cette Classe... =x
        Comment je peux faire?



        PS: Si j'ai fait une bétise, ou si ce que j'ai dit est faux, dites le moi car j'ai commencé doctrine il y a moins d'une semaine... ^^'


        EDIT2 :

        Pour ceux qui chercherais, problème résolu grâce à cette solution:

        Site:
        columns:
        id: { type: integer, notnull: true, primary: true, autoincrement: true }
        nom: { type: string(50), notnull: true, unique: true }
        image: { type: string(100) }
        adresse: { type: string(100), notnull: true, unique: true }
        lien_mort: { type: boolean, notnull: true }
        description: { type: string(4000) }
        note: { type: float, notnull: true }
        nb_fois_note: { type: integer, notnull: true }
        nb_clic: { type: integer, notnull: true }
        relations:
        Classes: { class: Classe, refClass: InterSiteClasse}


        Classe:
        columns:
        id: { type: integer, notnull: true, primary: true, autoincrement: true }
        nom: { type: string(30), notnull: true, unique:true }
        relations:
        Classes: { class: Site, refClass: InterSiteClasse }


        InterSiteClasse:
        columns:
        site_id: { type: integer, notnull: true, primary: true }
        classe_id: { type: integer, notnull: true, primary: true }
        relations:
        Classe: { foreignAlias: InterSitesClasses, onDelete: CASCADE }
        Site: { foreignAlias: InterSitesClasses, onDelete: CASCADE }
        • Partager sur Facebook
        • Partager sur Twitter

        https://valoperf.com/ - Analyze your skill on Valorant (Riot Games)

        [Doctrine] Problème création de table

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown