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

ORM PHP Discussion :

Perte de "Unique" avec doctrine::build-schema sous symfony [Doctrine]


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Perte de "Unique" avec doctrine::build-schema sous symfony
    Bonjour à tous,
    Je suis nouveau sur symfony et je rencontre quelques problèmes au niveau de la construction du schéma.

    Pour simplifier le problème on va dire que j'ai une base de donnée avec 2 tables:
    Une table "Individual" (email,password,activated) qui sert à l'inscription des membres et une table "Individual_Profile" pour stocker les infos de profil (nom,prénom,date de naissance...)
    La relation entre les deux tables est de type 1-1

    J'ai utilisé un logiciel afin de créer mes tables et leurs relations de manière graphique (en fait j'ai pas seulement 2 tables mais un peu plus d'une quinzaine).
    Je génère un fichier sql qui me donne:
    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
     
    CREATE TABLE Individual (
      Id        int(10) NOT NULL AUTO_INCREMENT, 
      Email     varchar(255) NOT NULL UNIQUE, 
      Password  varchar(255) NOT NULL, 
      Activated varchar(255) NOT NULL, 
      AddressId int(10) UNIQUE, 
      PRIMARY KEY (Id)) CHARACTER SET UTF8;
     
    CREATE TABLE Individual_Profile (
      Id           int(10) NOT NULL AUTO_INCREMENT, 
      LastName     varchar(255) NOT NULL, 
      FirstName    varchar(255) NOT NULL, 
      DateOfBirth  date NOT NULL, 
      Picture      varchar(255), 
      IndividualId int(10) NOT NULL UNIQUE, 
      PRIMARY KEY (Id)) CHARACTER SET UTF8;
     
    ALTER TABLE Individual_Profile ADD INDEX FKIndividual547380 (IndividualId), ADD CONSTRAINT FKIndividual547380 FOREIGN KEY (IndividualId) REFERENCES Individual (Id);
     
    ALTER TABLE Individual ADD INDEX FKIndividual681006 (AddressId), ADD CONSTRAINT FKIndividual681006 FOREIGN KEY (AddressId) REFERENCES Address (Id);
    Ensuite j'importe tout ca depuis le fichier .sql dans ma base de donnée mySql et tout se passe bien. Ci dessous extrait de ma table Individual_Profile

    Nom de l'index Type Unique Compressé Colonne
    PRIMARY BTREE Oui Non Id 0 A
    IndividualId BTREE Oui Non IndividualId 0 A
    FKIndividual547380 BTREE Non Non IndividualId 0 A

    En gros la clé IndividualId est bien unique.
    Ensuite j'utilise la fonction de symfony doctrine:build-schema afin de recupérer le schéma depuis ma base de donnée pour ensuite générer les forms et classes correspondants.
    Sauf qu'à ce moment là, symfony me sort:
    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
    Individual:
      connection: doctrine
      tableName: individual
      actAs: { Timestampable: ~ }
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        email:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        password:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        activated:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        addressid:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
    
        IndividualProfile:
          local: id
          foreign: individualid
          type: many
    Je me retrouve avec un "Individual" qui peut avoir plusieurs "Profiles"????
    Si quelqu'un peut m'aider car j'ai beau chercher, je suis incapable de trouver l'erreur!
    Merci
    John

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    La bonne méthode, pour créer une base avec symfony consiste à créer le shema.yml et à en faire la base.

    Partir d'une base créer avec un outils quelconque et importée sous symfony ne pourra que donner de mauvais résultat et ne doit être utilisé que dans les cas extrêmes. Et même là, des ajustement manuels sont généralement nécessaire.

    Part du shema que tu as fais visuellement pour construire avec ton éditeur un shema.yml qui correspondra aux objets du modèles que tu souhaites manipuler, doctrine se chargera de créer les tables nécessaires.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  3. #3
    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
    Merci déjà pour ta réponse,
    Résoudre le problème à la main directement dans le fichier schema.yml c'est déjà fait, j'ai remplacé les "many" par "one" et tout est rentré dans l'ordre.

    Ce qui m'embête c'est que indépendamment du logiciel utilisé les tables étaient bien configurées sur mysql,et c'est seulement lors de leur chargement de la base de données vers schema.yml que l'erreur est apparue.
    De plus le logiciel que j'utilise c'est celui de Visual Paradigm, je le teste dans le cadre d'un "peut être" achat pour ma société, donc j'aimerai bien avoir toutes les billes en main pour prendre ma décision à la fin des 30jours d'essai (Vu le prix de la licence je vais pas me risquer ...)

    Si quelqu'un connait un peu plus ce problème, merci d'avance,
    John

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Citation Envoyé par johnbenz Voir le message
    Si quelqu'un connait un peu plus ce problème, merci d'avance
    faut parcourir un peu les forum avant de pondre ceci !

    Plus sérieusement, si tu veux travailler d'une manière performante avec doctrine 1 ou 2, tu n'as d'autre choix que de partir de ton modèle objet. Si cela ne suis pas ce que tu imaginais il y a encore 3 jours, change de manière de voir.

    Pour éviter au maximum les emmerdes lors du développement, il faut que le modèle (ici décrit dans shema.yml) soit à l'origine des tables et non l'inverse.

    Accessoirement, il faut respecter les conventions de nommages utilisées sous symfony/doctrine pour éviter d'autre complications ultérieurs dans le modèle. En prime, sur une relation 1-n correctement définie, il n'est pas nécessaire de préciser un type ou un foreignType, c'est la valeur par défaut.

    Donc reprends ton schéma réalisé sur le logiciel d’analyse que tu veux, essaye d’imaginer comment tu vas en créer un modèle objet permettant de travailler les données, dans ton programme, en objet, au mieux. Écris le shema.yml qui te semble correcte, génère la base que ton modèle considère nécessaire pour pouvoir fonctionner et tu éviteras de très nombreux problèmes.

    Mais après, c'est toi qui est maître de ton développement et tu peux te passer de conseils...
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  5. #5
    Membre habitué Avatar de Maerlyn31
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 71
    Points : 167
    Points
    167
    Par défaut
    Marant, je suis nouveau sur le forum (employé depuis peu dans une boîte où je fais de la R&D symfony, du coup j'ai du temps et des neurones à reposer ^^), et c'est au moins la 4ème fois en une semaine que je vois ces problemes de BDD => schema au lieu de l'inverse

  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
    Je n'ai pas dit que je ne voulais pas écouter les conseils, si je suis sur un forum c'est justement pour connaitre l'avis des gens. Après la décision sera mienne, elle sera bonne ou moins bonne, mais j'aime bien aussi savoir pourquoi quelque chose ne fonctionne pas.
    J'ai bien pris note de ton conseil qui est de commencer directement par la création du fichier schema.yml et au vu de tes divers posts et de ta participation sur ce forum je me dis qu'il y a 90% de chances que celà soit la meilleure solution.
    D'un autre côté j'aime bien avoir tous les éléments en mains pour faire un choix. Il y a une fonction "build-schema" et si elle existe, il doit bien y avoir une raison. Si elle ne marche pas, là aussi j'aimerai bien comprendre pourquoi.
    Voilà donc maintenant si tu sais pourquoi ça a merdé dans mon cas et que tu veux bien me l'expliquer, je t'en remercie d'avance.
    Bonne fin d'aprem,
    John

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

Discussions similaires

  1. Erreur sur doctrine:build-schema
    Par death6666 dans le forum ORM
    Réponses: 9
    Dernier message: 27/09/2010, 01h21

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