[Symfony] Clef étrangère

Eléphant du PHP | 53 Messages

03 juin 2011, 19:42

Bonjour,

Je débute dans la création d'un petit site basé sous symfony et je me retrouve avec un souci de clé étrangère dans mon modèle de données :

J'ai donc 2 tables : utilisateur et compte.
La relation est la suivante : 1 et plusieurs
Bref :
1/ Un utilisateur possède plusieurs comptes
2/ Un compte appartient à un seul utilisateur

Voilà ce que donne la modélisation dans moins fichier : schema.yml (doctrine est utilisé)

Code : Tout sélectionner

Compte: connection: doctrine tableName: compte columns: id: type: integer(4) fixed: false unsigned: false primary: true autoincrement: true numeros: type: string(10) fixed: false unsigned: false primary: false notnull: true autoincrement: false libelle: type: string(20) fixed: false unsigned: false primary: false notnull: true autoincrement: false utilisateur_id: type: integer(4) fixed: false unsigned: false primary: false notnull: true autoincrement: false relations: Utilisateur: local: utilisateur_id foreign: id type: one Utilisateur: connection: doctrine tableName: utilisateur columns: id: type: integer(4) fixed: false unsigned: false primary: true autoincrement: true nom: type: string(20) fixed: false unsigned: false primary: false notnull: true autoincrement: false prenom: type: string(20) fixed: false unsigned: false primary: false notnull: true autoincrement: false login: type: string(30) fixed: false unsigned: false primary: false notnull: true autoincrement: false mdp: type: string(30) fixed: false unsigned: false primary: false notnull: true autoincrement: false dateajout: type: timestamp(25) fixed: false unsigned: false primary: false notnull: true autoincrement: false created_at: type: timestamp(25) fixed: false unsigned: false primary: false notnull: true autoincrement: false relations: Compte: local: id foreign: utilisateur_id type: many
Voici mon code symfony :

Pour le moment je ne joue qu'avec le Get() et le Set() généré à la volée par symfony :
        //Création d'un compte 
	$monCompte = new Compte();
	$monCompte->setNumeros('12345A');
	$monCompte->setLibelle('Compte courant');
	$monCompte->save();	
	
	// Creation d'un utilisateur
	$monUtilisateur = new Utilisateur();
	$monUtilisateur->setNom('Toto');
	$monUtilisateur->setPrenom("titi");
	$monUtilisateur->setLogin("Login01");
	$monUtilisateur->setMdp("pass01");
	$monUtilisateur->setCompte($monCompte);
	$monUtilisateur->save();
	echo $monUtilisateur;
L'erreur retournée est la suivante :
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`photos`.`compte`, CONSTRAINT `compte_ibfk_1` FOREIGN KEY (`utilisateur_id`) REFERENCES `utilisateur` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
J'ai permuter les clés étrangères sans succès, j'ai vérifier que le bon moteur de la base de données était employé (innoDB) mais j'ai toujours l'erreur.
J'ai cherché sur google sans plus de résultats.
Si vous avez des pistes ou des tutos etc. je suis preneur !!

Par avance merci

Thegritch

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 juin 2011, 21:20

Plutôt que de tester ton schéma depuis le code PHP, si tu regardais dans phpMyAdmin si les champs et les relations sont correctement contruites ? ;)

Mais sinon, si tu lis le message d'erreur, tu verras qu'elle te dit que lors de la création d'un enregistrement dans la table "photo", il manque un "id_utilisateur" valide.
Donc, à priori, rien à voir avec la relation dont tu nous parles.
De plus, pour une relation 1:n, pas la peine de la mettre de chaque côté, sauf si tu veux redéfinir l'alias.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer