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 :

Problème avec mes FK [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 85
    Par défaut Problème avec mes FK
    Hello,

    Dans le cadre de mon entrainement à l'utilisation de symfony, j'ai commencer à mettre en place ma base de donnée dans le fichier schema.yml, voici son contenu :

    Code YAML : 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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
     Billets:
      actAs:
        Timestampable: ~
        Sluggable:
          fields: [titre]
      columns:
        author:
          type: integer
          notnull: true
        category:
          type: integer
          notnull: true
        titre:
          type: string(45)
          notnull: true
          unique: true
        contenu:
          type: string()
          notnull: true
        visible:
          type: integer(1)
          default: '1'
          notnull: true
      relations:
        Utilisateurs:
          local: author
          foreign: id
          foreignAlias: BilletsAuteur
        Categories:
          local: category
          foreign: id
          foreignAlias: BilletsCategorie
     
    Categories:
      actAs:
        Sluggable:
          fields: [nom]
      columns:
        nom:
          type: string(45)
          notnull: true
          unique: true
     
    Commentaires:
      actAs:
        Timestampable:
          created:
            name: created_at
            type: timestamp
            format: Y-m-d H
          updated:
            disabled: true
      columns:
        billet:
          type: integer
          notnull: true
        pseudo:
          type: string(45)
          notnull: true
        email:
          type: string(45)
          notnull: true
        site:
          type: string(45)
          notnull: false
        contenu:
          type: string()
          notnull: true
        ip:
          type: string(45)
          notnull: true
      relations:
        Billets:
          local: billet
          foreign: id
     
    Utilisateurs:
      columns:
        pseudo:
          type: string(45)
          notnull: true
        email:
          type: string(45)
          notnull: true
        passwd:
          type: string(45)
          notnull: true


    un petit

    Code CONSOLE : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     	symfony doctrine:build all

    Puis mes tables se sont inséré en base sans problème.

    J'ai ensuite voulu ajouter des fixtures, voici mes fichiers :
    Code YAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    categories:
      malife:
        nom: Ma Life
      dev:
        nom: Programmation

    Code YAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    utilisateurs:
      aosix:
        pseudo: AoSiX
        email: julien@ao6-labs.eu
        passwd: aosixpwd

    Code YAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    billets:
      bienvenue:
        author: aosix
        category: malife
        titre: Bienvenue sur le blog !
        contenu: je suis le contenu du blog
        visible: 1


    Lorsque je fait un data-load, l'obtient une erreur ( c'est chez moi et du coup je me souviens plus exactement de l'erreur mais c'est... ) à propos de mes FK, comme quoi il y a un problème de contrainte.

    y a t'il un problème dans un de ces fichiers ? Je vous avourez avoir fait mes Relations un peu au hasard car je ne suis pas sur d'avoir tout compris à leurs fonctionnement.

  2. #2
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Tes clés étrangères sont en : type: integer.

    Est-ce que cela correspond exactement au type utilisé pour les clés des tables User et Categories dans la base ?
    Dans le doute, essaye de les déclarer en integer(11), vérifie s'il faut ou non les déclarer unsigned, etc.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 85
    Par défaut
    Hello,

    je viens de regarder en base, tous sont des BIGINT(20) signé ( les 'id' et les champs qui y font références ), aucune différence notable donc.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu devrais pas faire plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    billets:
      bienvenue:
        Utilisateurs: aosix
        Categories: malife
        titre: Bienvenue sur le blog !
        contenu: je suis le contenu du blog
        visible: 1
    ?

  5. #5
    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
    Comme le dit Tirkyth c'est le nom du lien utilisé dans relation qu'il faut utiliser dans fixture, et non le nom du champ de liaison.

    Par contre, quelques remarques sur ton schéma.

    Utilise, pour le nom du champ de liaison quelque chose du genre <nom>_id. Dans la table billet, le champs author devient alors author_id, plus lisible et conforme aux conventions doctrine.

    Le nom des tables devraient toujours être au singulier, en effet, chaque enregistrement comporte un billet.

    Dans les liaisons 1-N, le nom de la liaison unique ne devrait pas comporter de S, dans la table billet, l'auteur est unique, le S laisse supposer qu'il pourrait y avoir plusieurs auteurs... Par contre, du côté multiple, le S permet d'indiquer qu'il y a plusieurs billetS pour un auteur et donc, que l'on va récupérer une collection_doctrine.


    Le schéma devient donc :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    Billet:
      actAs:
        Timestampable: ~
        Sluggable:
          fields: [titre]
      columns:
        author_id:
          type: integer
          notnull: true
        category_id:
          type: integer
          notnull: true
        titre:
          type: string(45)
          notnull: true
          unique: true
        contenu:
          type: string()
          notnull: true
        visible:
          type: boolean
          default: true
          notnull: true
      relations:
        utilisateur:
          local: author_id
          foreign: id
          foreignAlias: auteurs
        categorie:
          local: category_id
          foreign: id
          foreignAlias: categories
     
    categorie:
      actAs:
        Sluggable:
          fields: [nom]
      columns:
        nom:
          type: string(45)
          notnull: true
          unique: true
     
    commentaire:
      actAs:
        Timestampable:
          created:
            name: created_at
            type: timestamp
            format: Y-m-d H
          updated:
            disabled: true
      columns:
        billet_id:
          type: integer
          notnull: true
        pseudo:
          type: string(45)
          notnull: true
        email:
          type: string(45)
          notnull: true
        site:
          type: string(45)
          notnull: false
        contenu:
          type: string()
          notnull: true
        ip:
          type: string(45)
          notnull: true
      relations:
        billet:
          local: billet_id
          foreign: id
          foreignAlias: billets
     
    Utilisateur:
      columns:
        pseudo:
          type: string(45)
          notnull: true
        email:
          type: string(45)
          notnull: true
        passwd:
          type: string(45)
          notnull: true
    On a donc pour un billet récupéré dans $billet l'objet auteur $billet->getAuteur(), l'objet catégorie $billet->getCategorie() et la collection des objets commentaires avec $billet->getCommentaires()

    De même depuis un commentaire dans $commentaire, on a le billet correspondant dans $commentaire->getBillet(), et le nom de l'auteur du billet commenté par $commentaire->getBillet()->getUtilisateur() encore mieux, les tous les comentaires du billet, dans une collection par $commentaire->getBillet()->getCommentaires()

    De quoi envisager quelques perspectives intéressantes...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 85
    Par défaut
    Bonjour mimi68,

    Merci pour ces règles de nommages spécifique à doctrine, je ne les connaissait pas ( et ne comprend même pas l'intérêt du foreignAlias ) mais j'essaierai de m'en souvenir pour la suite !

    Aussi, je me demandais si vos remarques concernent seulement les conventions de nommages ou apportent elles un changement vis à vis des liens possible dans les modèles (mis à part le nom des méthodes, cela va de soit ) ?

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

Discussions similaires

  1. [FreeBSD] Problème avec mes disques durs
    Par gorgonite dans le forum BSD
    Réponses: 24
    Dernier message: 29/06/2006, 17h03
  2. problème avec mes constantes
    Par salseropom dans le forum C
    Réponses: 6
    Dernier message: 10/05/2006, 17h37
  3. [JDBC]problème avec mes id
    Par Hydre dans le forum JDBC
    Réponses: 12
    Dernier message: 29/09/2005, 13h19
  4. [std::list][find_if] problème avec mes foncteurs
    Par n!co dans le forum SL & STL
    Réponses: 12
    Dernier message: 04/02/2005, 11h56
  5. Problème avec mes tables de relation...
    Par mmike dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/06/2003, 15h16

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