Bonjour,
J'ai du mal à résoudre ce problème :

J'ai une table "textures" dans ma BDD qui a un champ "collab_id" correspondant aux id d'une autre table "collabs".

J'ai un controller CollabsController, qui renvoie des variables à sa vue. Cette vue affiche un tableau avec les différentes colonnes de la table collabs.

Je voudrais afficher dans ce tableau le nombre d'entrées de la table textures dont la colonne collab_id à la même valeur que l'id de la table collabs.

En gros je voudrais afficher :

id : 1, Nom : Collab 01, Textures : 49 (nombre de textures dont la colonne collab_id a une valeur de 1)

Ci dessous le code de la méthode admin_index du CollabsController dans laquelle je veux compter les entrées de la table textures en fonction de l'id :

function admin_index(){
        $this->loadModel('Collab');
        $d'collabs'] = $this->Collab->find(array(
            'fields' => 'Collab.id,Collab.name,Collab.slug',
        ));
        $this->set($d);
    }

Je n'arrive pas à compter les entrées d'une table différente en fonction de l'id indiqué.
J'ai essayé de faire un "join", mais je patine... car il s'agit de compter et non d'afficher.

Pouvez vous m'indiquer une piste ? Merci !

3 réponses


je dis peu etre des betises , mais pourquoi ne pas utiliser la fonctions findCount() ?

$condition = array( tes conditions ); 
$d'count'] = $this->Collab->findCount($condition);

j’espère etre dans le bon hehe

Merci,
Oui, c'est ce que je comptais faire, seulement je n'arrive pas à formuler correctement ce findCount étant donné que j'aimerais directement intégrer ces additions dans le tableau $d'collabs'] qui est renvoyé à la vue.

Voici un debug de $d'collabs'] du CollabsController :

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => Nom1
            [slug] => nom1
        )
    [1] => stdClass Object
        (
            [id] => 2
            [name] => Nom2
            [slug] => nom2
        )
)

Ce que j'aimerais obtenir :

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => Nom1
            [slug] => nom1
            [nbtextures] => 42
        )
    [1] => stdClass Object
        (
            [id] => 2
            [name] => Nom2
            [slug] => nom2
            [nbtextures] => 29
        )
)

Je voudrais le nombre de textures dans ce tableau renvoyé par un find() sur la table collabs.
Cependant pour calculer le nombre de textures pour chaque id de la table collabs, il faut compter la colonne collab_id de la table textures. Les valeurs de la colonne collab_id correspondent aux id de la table collab.
Désolé si ce n'est pas extrêmement clair...

Pas d'idées pour inclure dans un tableau envoyé à la vue, la somme des entrées d'une autre table ayant une certaine valeur dans une colonne ?