Bonjour à tous,

Voila je m'explique, pour ajouter un utilisateur j'ai un formulaire qui gère tout les champs (créé par le bake)
Toutefois il y a certains champs que j'aimerais éviter d'afficher sur le formulaire mais leurs donner une valeur avant le save dans l'insertion.

Dans le cas présent, j'ai une user qui a pour clé étrangère l'id du groupe auquel il est associé.

J'ai donc retiré le input relatif au group_id sur mon formulaire et j'ai fait quelquechose comme :

if (!empty($this->data)) {                        
            $this->User->create();
                        $this->data'User']'group_id'] = 1;
                        debug( $this->data);
            if ($this->User->save($this->data)) {
                $this->Session->setFlash(__('The user has been saved', true));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The user could not be saved. Please, try again.', true));
            }
        }

dans le controller.
Sur le debug j'ai bien toutes les infos dont j'ai besoin ainsi que le group_id voulu mais j'ai toujours l'erreur :

SQL Error: 1452: Cannot add or update a child row: a foreign key constraint fails (filmlivez\_cake.users, CONSTRAINT fk\_users\_groups FOREIGN KEY (groups\_id) REFERENCES groups (id) ON DELETE NO ACTION ON UPDATE NO ACTION)

et si je regarde dans le insert into de users le champ group_id n'apparait pas.

Ai-je manqué quelquechose ?

Merci

5 réponses


hyrax
Auteur
Réponse acceptée

Bon je suis un gros étourdis, le problème était simplement le fait que j'avais nommé mon champ dans la bdd groups_id et non group_id ...

Vire la liaison au niveau de la base de donnée.
Le debug te donne un index "Group" ?

hyrax
Auteur

Virer la relation de clé étrangère entre les 2 tables ?

et non j'ai cela :

Array
(
    [User] => Array
        (
            [username] => fdfgd
            [password] => 
            [email] => fdsf@fdsff.com
            [ville] => 
            [pays] => 
            [actif] => 
            [date_inscription] => Array
                (
                    [month] => 09
                    [day] => 02
                    [year] => 2011
                    [hour] => 12
                    [min] => 44
                    [meridian] => am
                )
            [derniere_connexion] => Array
                (
                    [month] => 09
                    [day] => 02
                    [year] => 2011
                    [hour] => 12
                    [min] => 44
                    [meridian] => am
                )
            [ip] => 
            [age] => 6
            [sexe] => m
            [groups_id] => 1
        )
)

lorsque je poste avec le champ group_id dans le formulaire et la meme chose quand j'utilise le code que j'ai mis plus haut

En fait tu as crée ta base avec MySQL Workbench (a en jugé par le nom de ta clef étrangère) et lors de l'export il a la facheuse tendance de créer les liaisons sur MySQL (regarde la section structure de ta table sur phpmyadmin et tu as un tableau en bas contenant les clefs, supprime les clefs de liaisons.

hyrax
Auteur

J'ai retiré les liaisons, donc l'insertion fonctionne mais mon group_id reste à 0 alors que je le définit bien à 1 dans mon controller, et c'est cela que je ne comprends pas.