Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > ORM > Doctrine
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 17/05/2011, 15h35   #1
Invité de passage
 
Inscription : mars 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 4
Points : 0
Points : 0
Par défaut Création d'un schema.yml particulier

Bonjour,

J'ai une table Animal qui ne contient qu'un champ id.
J'ai une relation n:n sur cette table Animal avec une table de jointure qu'on appellera Jointure dans laquelle j'ai un champ parent_id et un champ enfant_id. ces 2 champs sont liés au champ id de la table Animal.
De plus j'ai 2 autres tables : Chien et Chat
Ces 2 tables contiennent animal_id comme champ qui est donc lié au champ id de la table Animal.
J'aimerais, si possible, pouvoir faire un lien entre la table Chien et la table Chat via la table Jointure.
Le champ animal_id de la table Chien doit "correspondre" au parent_id de la table Jointure et le champ animal_id de la table Chat doit "correspondre" au champ enfant_id de la table Jointure.

Est ce que ce type de schéma est possible pour vous et comment l’écrire en yml ?
Merci d'avance
sheva23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 17h08   #2
Membre du Club
 
Homme
Analyse système
Inscription : mars 2011
Messages : 406
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Analyse système

Informations forums :
Inscription : mars 2011
Messages : 406
Points : 67
Points : 67
pas besoin d'ecrire manuelement il y'a des commande qui géré sa lors de l'installation
benhsaien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 17h15   #3
Invité de passage
 
Inscription : mars 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 4
Points : 0
Points : 0
Désolé mais je ne comprends pas ce que tu veux dire. Je cherche a créer un fichier schema.yml qui correspond à mes besoins et je veux savoir si c'est possible. Je ne vois pas comment ce fichier pourrait être créé exactement comme je le souhaite lors de l'installation ?
sheva23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 08h17   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
@benhsaien La pratique qui consiste à créer la base de données par des outils tel phpMyAdmin et à importer cette structure dans symfony/doctrine est une très mauvaise pratique et ne doit être utilisée que s'il n'est absolument pas possible de faire autrement.

Le shema.yml décrit le modèle objet dont la structure des données découle. Faire du shema.yml un reflet de la structure des données lui fait perdre cette notion de créateur du modèle et ne peux que conduire à une application peut fiable.


Je suppose que animal chien et chat sont des métaphores, si non le modèle ne répondrait pas aux FM.

Code :
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
# shema.yml (non testé)
Chien:
  column:
    nom: string(25)
    animal_id: integer
  relations
    animal:
      foreignAlias: chiens
 
Chat:
  column:
    nom: string(25)
    animal_id: integer
  relations
    animal:
      foreignAlias: chats
 
Animal:
  column:
    nom: string(25)
  relations:
    proches1:
      class: Animal
      refClass: AnimalLien
      foreignAlias: proches2
 
AnimalLien:
  column:
    parent_id:
      type: integer
      primary: true
    enfant_id:
      type: integer
      primary: true
  relations:
    parent:
      class: Animal
      local: parent_id
      foreign: id
      foreignAlias: parents
    enfant:
      class: Animal
      local: enfant_id
      foreign: id
      foreignAlias: enfants
C'est un shema très basic.
Il existe un behavior doctrine pour les relations hiérarchique qui pourrait être intéressant ici, voir la documentation doctrine.
La description de l'autorelation sur Animal mériterait de voir les nom parentsX retravaillés, mais je n'ai pas trop vu comment les nommer. Je ne suis même pas sur que le nom retour (parents2) ait ici le moindre intérêt à jamais être utilisé.
__________________
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 12h09   #5
Invité de passage
 
Inscription : mars 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 4
Points : 0
Points : 0
Merci pour cette réponse mais malheureusement cela n'a pas été possible (j'ai eu des erreurs en faisant le build).
J'ai tout de même créer un schéma qui me convient.
J'ai donc une table Chien dont le champ animal_id correspond a l'id de la table Animal. Et j'ai une table Edge qui fait la relation n:n de la table Animal avec un parent_id et un enfant_id qui correspondent au champ id de la table Animal.

Je voulais savoir si on peut faire une requête en partant de la table Chien vers la table Edge sans faire de join vers Animal. Soit une relation directe entre Chien et Edge du fait que animal_id (table Chien) et parent_id (table Edge) correspondent a l'id de la table Animal.

J'ai cette requête qui fonctionne :
Code :
1
2
3
4
5
6
$q = Doctrine_Query::create()
      ->from('Chien c')
      ->innerJoin('c.Animal a')
      ->innerJoin('a.Edge e')
      ->where('c.animal_id != 7')
      ->execute();
Je souhaiterais faire la même requête sans passer par Animal si possible.

Merci
sheva23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 14h19   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Le shema donné était à titre d'idée. L'indication "non testé" étant clair sur le fait qu'il avait de bonnes chances de ne pas passer du premier coup, mais qu'il pouvait servir de base de travail.

Sans le shema.yml de la base, aucune réponse n'est possible à ta question.
__________________
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h47.


 
 
 
 
Partenaires

Hébergement Web