Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/03/2011, 11h25   #1
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
Par défaut SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row

Bonjour, voici rapidement mon schema.
Code :
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 :
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 :
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.
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 13h49   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 08h53   #3
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
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.
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 10h07   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 10h57   #5
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
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
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 11h31   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 15h47   #7
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
Ok, je ne cracherais pas sur un coup de main de ta part. Comment je fais ca concrètement ?
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 16h13   #8
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2011, 13h54   #9
Membre régulier
 
Inscription : mars 2007
Messages : 225
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 225
Points : 86
Points : 86
Résolu,
J'avais une petite erreur qui passait inaperçue dans mon schema. Au lieu de ceci
Code :
1
2
3
4
5
6
 
relations:
    buttef:
      class: buttef
      refClass: tefbut
      foreign: inscriptiontef
je devais mettre cela:
Code :
1
2
3
4
5
6
relations:
    buttef:
      class: buttef
      refClass: tefbut
      foreignAlias: inscriptiontef
Tout marche à présent.
etoileweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 17h03   #10
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h26.


 
 
 
 
Partenaires

Hébergement Web