Bonjour à tous,
J'ai un soucis récurrent avec CakePHP, une manip qui me pose souvent des problèmes, une petite aide de votre part pourrais enfin combler cette lacune et me faire gagner beaucoup de temps.
Je m'explique :
J'ai crée une fonction compte dans mon UsersController.php

function compte(){ }

Je voudrais que sur cette page compte en puisse voir les statistiques du membre, comme par exemple le nombre d'articles écrit ou le nombre de commentaires posté.
J'ai donc un PostsController.php avec toutes les fonctions qui vont bien index.php et show.php
Voici mes deux tables :

  • la table users avec comme info id,username,password,mail,created
  • et la table posts avec comme info id,name,slug,content,created,author

Mon soucis est que je n'arrive pas à trouvé comment lier ces deux infos pour avoir les nombres adéquat dans ma page compte.
En terme général j'ai souvent le soucis d'afficher une variable dans ma vue qui ne correspond pas systématiquement au même controller.
Au début je voulais afficher le nombre d'articles écris sur le blog et mettre comme condition que l'author du post corresponde à l'username de l'user mais sans succés..

Merci de votre aide

7 réponses


zenkiai
Auteur
Réponse acceptée

Je ferme ce post car j'ai trouvé la solution :

function compte(){
        $d = $this->request->data;
        $user_username = $this->Auth->user('username');
        $user_id = $this->Auth->user('id');
        $d'statPost'] = $this->User->Post->find('count',array(
            'conditions' => array('Post.author'=>$user_username)
        ));
        $d'statComment'] = $this->User->Post->Comment->find('count',array(
            'conditions' => array('Comment.user_id'=>$user_id)
        ));
        $this->set($d);
    }

as-tu fait les liaisons $hasMany, $hasOne, $belongsTo ou $hasAndBelongsToMany dans tes models ?

zenkiai
Auteur

Dans mon model User.php j'ai

public $hasMany = array(
        'Comment',
        'Post'
    );

Dans mon model Post.php j'ai

public $belongsTo = array(
        'Category' => array(
            'counterCache' => array('post_count' => array('Post.online'=>1))
        ),
        'User'
    );

Merci de tes réponses

As-tu essayé de faire ?

$this->User->Post->find('??',array(??));
zenkiai
Auteur

Voici ce que j'ai fait dans ma fonction :

function compte(){
        $d = $this->request->data;
        $d'tot'] = $this->User->Post->find('count',array(
            'conditions' => array(??=??)
        ));
        $this->set($d);
    }

et dans ma vue :

<?php echo $tot; ?>

Cela fonction si je ne mets pas de condition, mais bien évidemment j'ai tous les articles, ce qui sert à rien pour les stats du membres.
J'ai essayé pleins de conditions mais je n'y arrive pas. J'ai toujours des erreurs me disant qu'il ne trouve pas tel et tel variable.
Comment fait-on pour charger dans cette page compte, le nombre d'articles par auteur? C'est cela que je n'arrive jamais à faire.
Merci

j'essaierai un truc du genre :

$d'nbPosts'] = $this->Post->find('count',array(
    'conditions' => array(
        'post.user_id' => $this->Auth->user('id')
    )
));
$this->set($d);

Il te suffit de mettre un champ post_count dans la table users de ta bdd et Cake s'occupe de tout ..