Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 16h13   #1
Membre régulier
 
Avatar de kéraunos
 
Homme
Inscription : janvier 2005
Messages : 157
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2005
Messages : 157
Points : 71
Points : 71
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 :
$ 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 :
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 :
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.
kéraunos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 17h30   #2
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

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

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
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.
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 18h40   #3
Membre régulier
 
Avatar de kéraunos
 
Homme
Inscription : janvier 2005
Messages : 157
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2005
Messages : 157
Points : 71
Points : 71
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 ?
kéraunos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 19h04   #4
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

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

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
Citation:
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.
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h22.


 
 
 
 
Partenaires

Hébergement Web