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] Clefs primaires multi champs (table de liaison)


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut [Doctrine] Clefs primaires multi champs (table de liaison)
    Bonjour,

    Je me mets doucement à Symfony2 et j'ai un petit problème. Je souhaite créer une table donc la clé primaire est composée de trois champs qui sont des clés étrangères.

    Quelque chose du genre:
    Contribution (#id_projet, #id_acteur, #id_rôle)

    J'ai essayé de la manière suivante:

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    <?php
    namespace ProjetDesk\ProjethequeBundle\Entity;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
     
    /**
     * @ORM\Entity
     */
    class Contribution 
    {
     
     
    	/**
    	 * @ORM\Id
         * @ORM\ManyToOne(targetEntity="Acteur")
         */    
        private $acteur;
     
    	/**
    	 * @ORM\Id
         * @ORM\ManyToOne(targetEntity="Projet")
         */    
        private $projet;
     
    	/**
    	 * @ORM\Id
         * @ORM\ManyToOne(targetEntity="Role")
         */    
        private $role;
     
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set acteur
         *
         * @param ProjetDesk\ProjethequeBundle\Entity\Acteur $acteur
         */
        public function setActeur(\ProjetDesk\ProjethequeBundle\Entity\Acteur $acteur)
        {
            $this->acteur = $acteur;
        }
     
        /**
         * Get acteur
         *
         * @return ProjetDesk\ProjethequeBundle\Entity\Acteur 
         */
        public function getActeur()
        {
            return $this->acteur;
        }
     
        /**
         * Set projet
         *
         * @param ProjetDesk\ProjethequeBundle\Entity\Projet $projet
         */
        public function setProjet(\ProjetDesk\ProjethequeBundle\Entity\Projet $projet)
        {
            $this->projet = $projet;
        }
     
        /**
         * Get projet
         *
         * @return ProjetDesk\ProjethequeBundle\Entity\Projet 
         */
        public function getProjet()
        {
            return $this->projet;
        }
     
        /**
         * Set role
         *
         * @param ProjetDesk\ProjethequeBundle\Entity\Role $role
         */
        public function setRole(\ProjetDesk\ProjethequeBundle\Entity\Role $role)
        {
            $this->role = $role;
        }
     
        /**
         * Get role
         *
         * @return ProjetDesk\ProjethequeBundle\Entity\Role 
         */
        public function getRole()
        {
            return $this->role;
        }
    }
    Mais quand je fais php app/console doctrine:schema:update --force, il me met:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     [PDOException]
     SQLSTATE[HY000]: General error: 1025 Error on rename of '.\projetdesk\#sql-c4c_97' to '.\projetdesk\contribution' (errno: 150)
    Quelqu'un a une idée?

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 21
    Par défaut
    Boniour,

    Il y a quelques heures, j'ai eu le même problème après quelques recherches. Je suis tombé sur deux sites :
    http://www.doctrine-project.org/jira...s:all-tabpanel
    http://stackoverflow.com/questions/5...e-of-errno-150

    J'ai essayer de supprimer manuellement l'index puis la clé étrangère sans succès. J'ai finalement supprimé la table puis je l'ai recréé avec : php app/console doctrine:schema:update --force

    Cette solution est un peu drastique mais en environnement de développement et surtout en début de projet, on a généralement pas de donné importante en base.

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Je souhaite créer une table donc la clé primaire est composée de trois champs qui sont des clés étrangères.
    Fais le directement dans le SGBD. Sauf cas particuliers (import de données externes à partir de fichiers plats par exemple), ce n'est pas le rôle d'une application de créer des tables dans une BDDR. Le modèle doit pré-exister à l'application.

    Et j'ose espérer qu'une fois la structure de la BDD, bien normalisée, est créée, cet Objet Réellement Merdique qu'est Doctrine sait au moins la lire sans vouloir la tripatouiller pour la mettre à sa sauce !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Inserrer un champ de Clef Primaire dans une table
    Par Bonero dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/07/2012, 15h37
  2. Réponses: 3
    Dernier message: 24/07/2007, 18h06
  3. Réponses: 1
    Dernier message: 20/06/2007, 13h36
  4. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 21h06
  5. récupérer la clef primaire d'une table
    Par orionis69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/02/2004, 13h00

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