Bonjour à tous,
je suis entrain de m'entrainer sur la mise en place d'un back office. J'ai une question sur l'édition des bases de données.
Voici mon code

public function admin_edit($url, $id = null) {
// est ce qu'on a modifié des données?
        if ($this->request->is('post') || $this->request->is('put')) {
            $this->User->save($this->request->data);
        } else {
            debug('erreur');
        }
// Ici on va chercher les éléments en bdd qui nous intéresse par rapport à l'id ! et on les envoi au request data.
        $this->User->id = $id;
        $this->request->data = $this->User->read();
    }

Le code marche bien comme ca. J'avais fais une erreur avant je l'avais mis comme ceci

public function admin_edit($url, $id = null) {
// Ici on va chercher les éléments en bdd qui nous intéresse par rapport à l'id ! et on les envoi au request data.
        $this->User->id = $id;
        $this->request->data = $this->User->read();
// est ce qu'on a modifié des données?
        if ($this->request->is('post') || $this->request->is('put')) {
            $this->User->save($this->request->data);
        } else {
            debug('erreur');
        }
    }

Pourriez vous me dire pourquoi en faisant de cette manière juste ci-dessus, la bdd ne se mettait pas à jour? Mon code marche parce que j'ai inversé l'ordre, mais je ne saisi pas la logique du pourquoi ca marche dans un sens et pas dans l'autre.

Merci =)

5 réponses


nebjix
Réponse acceptée

Salut, je crois que c'est parce-que tu modifie le $this->request->data.
$this->request->data ne contiens donc plus les infos envoyé par le form mais les infos chargé en BDD.
La BDD se mettais donc bien à jour mais avec les mêmes infos, ce qui ne modifiais rien.

GrafikFan
Réponse acceptée

En fait, tu écrases ton les données du formulaire associé à l'$id par la récupération des données de la BD associé à l'$id.

Ensuite, ton script se poursuit comme si tu as posté mais avec des valeurs provenant de ta DB (et non plus de ton form).

Voilà (je sais pas être plus clair que cela :) )

Bien à toi,
gFan

Je confirme.

0-sony
Auteur

Merci pour ces réponses.
Pourtant je pensais qu'en validant le formulaire, je rentrais dans la boucle IF du coup tout se mettait en place.

Il lit bien le request data, mais dès lors où je valide le formulaire ca me fait l'action is('post') ou is('put') non ?

Merci de vos lumieres ^^

[Edit]

Ahhhh je pense avoir compris... ca devient plus un request->data mais un simple read en faite... c'est comme si on changeait un peu sa nature..? enfin moi je le percois comme ca ^^

0-sony
Auteur

ok je vois merci beaucoup ! :)