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 :

Doctrine : importer relations dans schema.yml à partir d'une base existante [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Doctrine : importer relations dans schema.yml à partir d'une base existante
    Bonjour,

    J'ai conçu et créé une base de donnée en MySQL (moteur: InnoDB) sur mon serveur de développement. Au lieu de me taper à la main l'écriture du fichier schema.yml, j'ai décidé de l'importer directement à partir de la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ php symfony doctrine:build-schema
    Ça a l'air de fonctionner : le fichier schema.yml est rempli de noms de tables, de champs et de relations.

    Mais deux choses me semblent louches :

    Premièrement, j'ai l'impression que les relations du type onDelete: cascade n'apparaissent pas.

    Exemple :
    J'ai une table Offre dont chaque entrée dépend nécessairement d'un Produit (entrée de la table du même nom). Si je supprime le Produit A, toutes les offres associées à A doivent disparaître. Ce qui se traduit par une contrainte en MySQL.
    Voici ce que j'ai dans schema.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Offer:
      connection: doctrine
      tableName: offer
      columns:
        id:
          #...
      relations:
        Product:
          local: product_id
          foreign: id
          type: one
    Au lieu de type: one, je m'attendais plutôt à trouver quelque chose du genre onDelete: CASCADE, comme on peut le voir ici.

    Est-ce équivalent ?

    Deuxième interrogation :
    Dans ma table Client, le champ email doit être unique. Ce qui donne, côté MySQL : un index name_UNIQUE sur la colonne name, cet index étant configuré pour être unique.
    Ce que je ne comprends pas, c'est que dans schema.yml, le mot-clé "unique" n'apparaît pas du tout. Et voici la seule occurrence de "email" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    email:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
    Je ne vois pas comment le modèle symfony pourra comprendre que le champ email de la table Client doit être unique. Vous avez une explication ?

    Merci beaucoup pour votre lecture.
    Dernière modification par Invité ; 31/01/2012 à 18h37.

  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 : 41
    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
    Oui doctrine génère une grosse partie du schema.yml mais il ne sait pas tout faire le reste il faut que tu le face toi même. Pour cela tu as la doc doctrine très bien expliqué.

    Le est la déclaration d'une liaison entre 2 tables et non une indication pour un delete. C'est bien qui permet de faire ça.

    Doctrine ne récupère pas les indexes, clé unique, etc.
    Si tu veux un fichier bien plus complet je te conseil d'utiliser mysqlworkbench avec le plugin doctrine, il te génère un fichier plus complet.

  3. #3
    Invité
    Invité(e)
    Par défaut
    D'accord, c'est bien ce que je pensais. Merci pour ta réponse !
    Et ça tombe bien, j'ai justement utilisé MySQLWorkBench pour concevoir ma base de données. Est-ce que l'utilisation du schema exporter au lieu du plugin (ancien projet, apparemment) est éprouvée, voire recommandée ?

    Question subsidiaire : déclarer un lien entre deux tables me paraît tout à fait facultatif du moment que j'inclus une contrainte d'intégrité des données (du genre ON DELETE CASCADE). Est-ce vrai ?

  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 : 41
    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
    Question subsidiaire : déclarer un lien entre deux tables me paraît tout à fait facultatif du moment que j'inclus une contrainte d'intégrité des données (du genre ON DELETE CASCADE). Est-ce vrai ?
    Alors c'est le plus important dans un ORM, c'est ce qui te facilite la vie, le onDelete n'intervient que lors de la suppression.
    Il est préférable d'avoir plus d'options que pas assez.

    Pour le plugin, je n'utilise que le plugin (sur la toute dernière version de mysqlworkbench), je ne connais pas l'autre.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/08/2013, 15h18
  2. Réponses: 1
    Dernier message: 19/07/2012, 14h41
  3. mcd à partir d'une base existante?
    Par melodide dans le forum Outils
    Réponses: 2
    Dernier message: 12/12/2010, 13h29
  4. [1.x] Relations many to many dans schema.yml
    Par titiyoyo dans le forum Symfony
    Réponses: 21
    Dernier message: 10/09/2010, 13h24
  5. Afficher des données dans un datagrid à partir d'une base de données MySQL
    Par General_Garrisson dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 15h14

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