Bonjour à tous et merci d'avance pour votre aide.

Je ne parvient à comprendre pourquoi CakePHP double une requête SQL.

Controller

public function view($id){

        //Renvoie à l'index si l'isset n'est pas définit
        if (!isset($id)){$this->redirect('index');}

        //Vérifie si l'entité à afficher appartient bien à l'utilisateur ? 
        $pet = $this->Pet->find('first', array('conditions' => array(
            'Pet.user_id' => $this->Auth->user('id'), 'Pet.id' => $id
        )));

        //Si le résultat de la requête est vide
        if(empty($pet)){
            $this->Session->setFlash(
                'Cette action ne peut être éxécuté.',
                'default',
                array('class' => 'alert alert-danger')
            );            
            $this->redirect('index');
        }else{
            if (!empty($this->request->data)){

                //Opérateur ternaire, vérifie l'existence de l'upload ou d'un avatar existant.
                //$avatar = (empty($this->request->data['Pet']['avatarInput']['name'])) ? '' : 'avatarInput';
                $this->Pet->set($this->request->data['Pet']); //Met les données dans le modéle 
                if($this->Pet->validates(array('fieldList' => array('pet_name') ))){

                    $this->Pet->save(array(
                        'pet_name'=> $this->request->data['Pet']['pet_name']
                        //'avatar'  => $avatar = (empty($avatar)) ? 0 : 1 //0=> pas d'avatar, 1=> avatar disponible
                    ), false);
                    $this->Session->setFlash(
                        'Votre animal a bien été modifié.',
                        'default',
                        array('class' => 'alert alert-success')
                    );
                } 
                else {
                    $this->Session->setFlash(
                        'Les données introduite ne sont pas valide.',
                        'default',
                        array('class' => 'alert alert-info')
                    );
                }
            } else {
                $this->request->data = $pet;
            } 
        }
    }

Model

    public function afterFind($results, $primary = false){
        //Récupére les path des avatars.
        foreach ($results as $k => $result){
            if(isset($result[$this->alias]['avatar']) && isset($result[$this->alias]['id'])){
                if($result[$this->alias]['avatar'] == 0){
                    $results[$k][$this->alias]['avatarPath'] = 'pets/no_avatar.jpg';
                } else {
                    $results[$k][$this->alias]['avatarPath'] = 'pets/' . 
                        ceil($result[$this->alias]['id'] / 1000) . '/' . $result[$this->alias]['id'] . '.jpg';
                }
            }
        }
        return $results;
    }

Logs Sql

BEGIN   1   1   0   
SELECT COUNT(*) AS `count` FROM `petsy`.`pets` AS `Pet` WHERE `Pet`.`id` = 32   1   1   0   
SELECT COUNT(*) AS `count` FROM `petsy`.`pets` AS `Pet` WHERE `Pet`.`id` = 32   1   1   0   
UPDATE `petsy`.`pets` SET `id` = 32, `pet_name` = 'Rombaaa' WHERE `petsy`.`pets`.`id` = '32'    0   0   1   maybe slow
COMMIT

Merci à vous,

2 réponses


Grafikart
Réponse acceptée

Mmh là ce n'est pas forcément facil à débugguer, je ne vois pas trop le code qui génère le count.

Moi aussi, je ne parviens pas à comprendre pourquoi.
Si j'en découvre la raison, je l'indiquerais dans ce post.

J'en ai jamais eu l'occasion, alors c'est le moment.
Encore merci pour tout le boulot que tu fais pour nous.