Je vais essaye d'être rapide dans les explications :
j'ai une requête assez spéciale à réaliser à cause de la structure des données : une table Users, et une table Friends avec 2 clés étrangères (ami_from, et ami_to) toute 2 clés primaire de Users. C'est un systeme classique de "je suis fan de" et "je suis suivis par"...
La requète permet de retrouver les amis, c'est à dire les utilisateurs qui se suivent mutuellement.
et la requète fonctionne bien :
<?php
$query = $this->Friends->find();
$query->select([
'countid' => $query->func()->count('*'), 'Users.username','Users.id','Users.avatar','Users.naiss','Users.created_at'
])
->join([
'table' => 'Users',
//'alias' => 'u',
'type' => 'LEFT',
'conditions' => 'Users.id = (Friends.ami_from + Friends.ami_to - '.$id.')',
])
->where([
'OR' => [['Friends.ami_from' => $id], ['Friends.ami_to' => $id]],
])
->group('Users.username')
->having(['countid >' => 1]);
$this->paginate = [
'limit'=>20
];
$this->set('friends', $this->paginate($query));
?>
Les données renvoyées sont parfaitement cohérentes. Mon problème vient de l'object retourné par cakephp. Il ne charge pas l'entity de Users, mais retourne juste les données sous forme de tableau.Du coup Je ne peux pas exploiter les valeurs retournées qui utilisent des formatages dans l'entity Users.
J'imagine que ça vient du ->join effectué manuellement plutôt qu'un ->contain, mais je ne trouve pas d'autres moyens pour écrire cette requète. Je n'utilise pas contain car je n'arrive pas à cause de la structure en double clé primaire de Friends elles même clé primaire de la même table Users.
Pour vous donner une idée, la requète à construire est :
SELECT (COUNT(*)) AS `countid`, Users.username , Users.id , Users.avatar , Users.created_at, Friends.ami_from AS `Friends__ami_from`, Friends.ami_to AS `Friends__ami_to`, Friends.created_at AS `Friends__created_at` FROM Friends LEFT JOIN Users ON Users.id = (Friends.ami_from + Friends.ami_to - $id) WHERE (Friends.ami_from = $id OR Friends.ami_to = $id) GROUP BY Users.username HAVING countid > '1'