Bonjour,

Je viens de remarqué quelque chose d'étrange, à chaque fois que je fais un save ou saveField, cake me fait 2 requête SELECT. La 1ère je comprends, il doit checké si l'enregistrement existe mais je ne comprends pas pourquoi la seconde.

Avez vous déjà eu le même soucis ?

5 réponses


Quel est ton soucis enfait?
Peux tu montrer un exemple stp?

elscorto
Auteur

Salut,

Alors pour t'expliquer vite fait, j'ai une page profil d'un membre où j'ai fait un compteur de nombre de vue du profil par un champ dans ma table, à chaque appel de mon action view, je vérifie si le visiteur est différent de celui connecté, si oui je rajoute +1 à mon champs

mon code

$new_view_count = 0;
if($d'profil']'Profil']'user_id'] != $this->Auth->user('id')){
    $new_view_count = $d'profil']'Profil']'view']+1;
    $this->Profil->id = $d'profil']'Profil']'id'];
    $this->Profil->saveField('view',$new_view_count);
    $d'profil']'Profil']'view'] = $new_view_count;
}

et mon debug

11 SELECT COUNT(*) AS count FROM lbc.profils AS Profil WHERE Profil.id = 2
12 SELECT COUNT(*) AS count FROM lbc.profils AS Profil WHERE Profil.id = 2
13 UPDATE lbc.profils SET view = 303 WHERE lbc.profils.id = '2'

Soit cake effectue 2 select avant de faire l'update, le 1er je peux comprendre, il doit vérifier que l'enregistrement existe bien mais pourquoi le second ? J'ai testé avec un save à la place du saveField mais même résultat.

J'ai également le même problème pour mon système de membres connectés.

Merci à toi!

Salut,
Est ce que tu as fait une action afterFind dans ton controller par hasard? beforeSave...afterSave?

elscorto
Auteur

Bien vu mais non !

Le seul callback que j'ai se trouve dans mon modèle User, je l'ai viré voir mais ça ne change rien

Et a quel moment fais tu ton debug?
Car peut être que ton premier select n'a rien a voir avec ton update?

Cela est génant sinon pour le fonctionnement de ton action?
Car peut être que c'est tout simplement cakePhp qui est ainsi, je n'ai jamais fait attention à vrai dire et cela m'étonnerai... mais bon on ne sait jamais ;)