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

Doctrine2 PHP Discussion :

Cannot add or update a child row: a foreign key constraint fails


Sujet :

Doctrine2 PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Cannot add or update a child row: a foreign key constraint fails
    Bonjour,

    Je voudrais que dans ma table "utilisateur", la colonne "discr_id_membre" contienne la valeur de "id_membre" de la table "membre".

    Voici la bdd utilisée :
    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
     
    -- phpMyAdmin SQL Dump
    -- version 3.4.10.1
    -- http://www.phpmyadmin.net
    --
    -- Client: localhost:3306
    -- Généré le : Mer 28 Mars 2012 à 11:06
    -- Version du serveur: 5.1.36
    -- Version de PHP: 5.3.0
     
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
     
    --
    -- Base de données: `utilisateurs`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `connexion`
    --
     
    DROP TABLE IF EXISTS `connexion`;
    CREATE TABLE IF NOT EXISTS `connexion` (
      `id_connexion` int(11) NOT NULL,
      `statut` varchar(10) COLLATE utf8_bin NOT NULL,
      PRIMARY KEY (`id_connexion`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
     
    --
    -- Contenu de la table `connexion`
    --
     
    INSERT INTO `connexion` (`id_connexion`, `statut`) VALUES
    (0, 'déconnecté'),
    (1, 'connecté');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `utilisateur`
    --
     
    DROP TABLE IF EXISTS `utilisateur`;
    CREATE TABLE IF NOT EXISTS `utilisateur` (
      `id_utilisateur` int(11) NOT NULL AUTO_INCREMENT,
      `login` varchar(20) COLLATE utf8_bin DEFAULT NULL,
      `password` varchar(8) COLLATE utf8_bin DEFAULT NULL,
      `discr_id_connexion` int(11) NOT NULL,
      `discr_id_membre` int(11) DEFAULT NULL,
      PRIMARY KEY (`id_utilisateur`),
      KEY `discr_id_membre` (`discr_id_membre`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=28 ;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `membre`
    --
     
    DROP TABLE IF EXISTS `membre`;
    CREATE TABLE IF NOT EXISTS `membre` (
      `id_membre` int(11) NOT NULL,
      `prenom` varchar(255) COLLATE utf8_bin DEFAULT NULL,
      `nom` varchar(255) COLLATE utf8_bin DEFAULT NULL,
      KEY `id_membre` (`id_membre`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
     
    --
    -- Contraintes pour les tables exportées
    --
     
    --
    -- Contraintes pour la table `utilisateur`
    --
    ALTER TABLE `utilisateur`
      ADD CONSTRAINT `utilisateur_membre` FOREIGN KEY (`discr_id_membre`) REFERENCES `membre` (`id_membre`) ON DELETE CASCADE ON UPDATE CASCADE;
     
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    Lorsque j'exécute mon script, j'obtiens l'erreur suivante :

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`utilisateurs`.`utilisateur`, CONSTRAINT `utilisateur_ibfk_1` FOREIGN KEY (`discr_id_membre`) REFERENCES `membre` (`id_membre`) ON DELETE CASCADE ON UPDATE CASCADE)'
    Cela fait des jours que je travaille à relier les deux tables automatiquement. Est-ce possible de le faire avec Doctrine (sachant qu'il s'agit, dans le code PHP, d'une entité héritée (utilisateur) par l'autre entitée (membre))?

    Merci d'avance.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Un petit up en mettant un titre peut-être plus explicite sur l'erreur rencontrée.

    J'ai beau chercher sur le web mais aucune réponse satisfaisante ne semble exister pour ce problème.

    La classe enfant hérite de la classe abstraite parente qui correspondent à des tables où la table parent contient une colonne pour référencer la table enfant.

    Si j'instancie la classe enfant avec des valeurs, tout va bien.
    Puis je persiste et flushe l'instance créée et là j'ai cette erreur parce qu'il faudrait que les données de la classe parente soient enregistrées en bdd AVANT celles de la classe enfant.

    Mais comment faire pour dire à doctrine 2 d'enregistrer d'abord la classe parente avant d'enregistrer la classe enfant ?

    Ou alors est-ce que ça veut dire que Doctrine 2 ne sait pas gérer correctement les héritages avec clé étrangère ... dans ce cas, c'est gênant non ?

    Merci de votre aide ...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bon, je vois à mon grand regret que personne ne peut m'aider à résoudre mon problème.

    Peut-être pourriez-vous m'indiquer alors une autre façon de procéder que celle que j'ai utilisée ? Comment feriez-vous si vous deviez créer ce projet ?

    Merci de votre aide ...

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/08/2015, 17h46
  2. Réponses: 1
    Dernier message: 18/04/2012, 10h31
  3. Cannot add or update a child row: a foreign key constraint fails
    Par dubitoph dans le forum Administration
    Réponses: 4
    Dernier message: 25/01/2012, 08h29
  4. Réponses: 3
    Dernier message: 28/11/2011, 17h26
  5. Réponses: 0
    Dernier message: 12/12/2007, 21h10

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