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

PHP & Base de données Discussion :

[Doctrine] Création d'un schema.yml particulier


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Par défaut [Doctrine] 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

  2. #2
    Membre éclairé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Par défaut
    pas besoin d'ecrire manuelement il y'a des commande qui géré sa lors de l'installation

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Par défaut
    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 ?

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    @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 : 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
    # 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é.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    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.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/01/2012, 19h04
  2. Doctrine, schema.yml et contrainte d'unicité
    Par Inarius dans le forum ORM
    Réponses: 23
    Dernier message: 11/06/2010, 00h19
  3. schema.yml pour relation n-n Doctrine
    Par psgman113 dans le forum ORM
    Réponses: 3
    Dernier message: 22/03/2010, 19h59
  4. [Doctrine] 2 schema.yml
    Par zoukkev dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/04/2009, 11h54

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