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 :

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row
    Bonjour, voici rapidement mon schema.
    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
     
    # TEF INSCRIPTION
     
    inscriptiontef:
      actAs:
        Timestampable:
      columns:
        nom:
          type:           string(225)
        prenom:
          type:           string(225)
        datenaissance:
          type:           datetime
        lieunaissance:
          type:           string(225)
        ...
     
        languematernelle:
          type:           string(225)
      relations:
        buttef:
          class: buttef
          refClass: tefbut
          foreign: inscriptiontef
     
    #but tef
     
    buttef:
      columns:
        nom:      string(225)
     
     
    # tef but: reuni inscriptiontef et buttef pour la relation plusieurs a plusieurs
     
    tefbut:
      columns:
        inscriptiontef_id:
          type: integer
          primary: true
        buttef_id:
          type: integer
          primary: true
      relations:
        inscriptiontef:
          foreignAlias: tefbut
          onDelete: cascade
        buttef:
          foreignAlias: tefbut
          onDelete: cascade
    Bref, "buttef" comporte plusieurs "buts" préenregistrés parmi lesquels le candidat choisit en remplissant le formulaire auto généré sur la base de la table "inscriptiontef". Dans le configure dudit formulaire (inscriptiontefForm), j'ai configuré le champ correspondant comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'buttef_list'      => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'expanded' => true, 'model' => 'buttef')),
    Donc à l'affichage, le formulaire présente bien les checkbox des choix de but disponible. Le problème, c'est qu'à la soumission du formulaire, ca renvoie l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`isfopnew`.`tefbut`, CONSTRAINT `tefbut_buttef_id_buttef_id` FOREIGN KEY (`buttef_id`) REFERENCES `buttef` (`id`) ON DELETE CASCADE)
    D'après les recherches que j'ai faites, le problème proviendrait du moteur de la base de donnée, mais j'ai vérifié et toutes les tables sont en InnoDB comme cela devrait être. Alors je ne sais plus quoi faire. Quelqu'un connait-il la solution à ce problème ? Merci.

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Ton shema.yml est presque parfait, en tous les cas il est parfaitement fonctionnel.

    Ce type de problèmes arrive souvent lors de la création d'un nouvel enregistrement, rarement à la modification. Est-ce aussi ton cas ?
    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 !

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut
    Mon schema n'est parfait (enfin, presque) que grâce à tes réponses à de précédentes questions que j'ai posées. Merci au passage.
    Ouais, l'erreur se produit à la création d'une nouvelle inscription.

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Ce qui manque, pour moi, dans ce shema, c'est des "s" à la fin de certain nom de relation pour indiquer que ce qui est retourné est un doctrine_collection et pas juste un enregistrement (sans "s"). Mais ceci n'empêche en rien le shema d'être fonctionnel.


    Il faut que les enregistrement "parent" soient dans la table avant que des enregistrement "enfant" sur la table de liaison ne puissent être écris. En effet, l'objet "parent" ne connait son Id qu'après la première écriture en base (a partir de là il n'est plus new et isNew() retourne false).
    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 !

  5. #5
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut
    J'ai bien soupçonné que l'erreur proviendrait du non-respect de ce principe, mais je ne peux pas faire remplir le formulaire en 2 étapes: une inscription d'abord et les buts de l'inscription ensuite. J'aimerais que tout se passe en une seule fois

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Tu peux faire un seul formulaire, mais tu va devoir séparer le traitement. Et donc le faire en grande partie manuellement.
    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 !

  7. #7
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut
    Ok, je ne cracherais pas sur un coup de main de ta part. Comment je fais ca concrètement ?

  8. #8
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Un form libre (non lié a doctrine).

    Traitement des sauvegardes à la mains après validation. C'est lourd, mais tu fais ce que tu veux...
    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 !

  9. #9
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Points : 142
    Points
    142
    Par défaut
    Résolu,
    J'avais une petite erreur qui passait inaperçue dans mon schema. Au lieu de ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    relations:
        buttef:
          class: buttef
          refClass: tefbut
          foreign: inscriptiontef
    je devais mettre cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    relations:
        buttef:
          class: buttef
          refClass: tefbut
          foreignAlias: inscriptiontef
    Tout marche à présent.

  10. #10
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    pas vu celle-là
    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 !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/03/2013, 18h06
  2. #1452-Cannot add or update a child row[MySQL]
    Par af.zakaria dans le forum Requêtes
    Réponses: 3
    Dernier message: 15/04/2012, 17h28
  3. Réponses: 2
    Dernier message: 11/11/2011, 19h25
  4. Réponses: 3
    Dernier message: 13/09/2011, 11h02
  5. Réponses: 2
    Dernier message: 14/08/2011, 14h25

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