Bonsoir à tous,

J'ai un petit problème relatif à Contain avec un paginate.
J'obtiens un :
[code]Fatal error: [] operator not supported for strings in C:\xampp\htdocs\cake\cake\libs\model\behaviors\containable.php on line 416[/code]

Je m'explique. Je suis en train d'essayer de coder un forum en limitant les requêtes que Cake doit faire de façon à optimiser pas mal. Du coup je me suis tourné vers les unbind et vers le composant Containable pour pouvoir y arriver. Je l'ai appliqué par défaut dans le AppModel, de façon à ne plus avoir à chaque fois la "magie" Cakephp, qui rend quand même l'application plus lourde qu'elle ne le devrait malheureusement. Pour la page d'index du forum, pas de souci, je récupère bien tout en une seule requête. J'ai donc bien compris, je pense comment marchait ce composant. Pour la gestion des forums, je veux afficher les threads qui appartiennent aux forums. J'ai donc fait la page, je récupère la catégorie, je fais un paginate des threads lui appartenant.
Et la j'ai l'erreur.

Voici le code que j'ai pour le paginate :

[code]$this->paginate = array(
'conditions' => array('Thread.board_id' => $id),
'limit' => 2,
'order' => 'Thread.created DESC',
'contain' => array(
'Post' => array(
'order' => 'Post.created DESC',
'limit' => 1,
'fields' => 'Post.created',
'User' => array(
'fields' => 'User.displayname',
'contain' => false,
),
),
'User' => array(
'limit' => 1,
'fields' => array('User.id','User.displayname'),
),
),
);
$data['threads'] = $this->paginate('Board.Thread');[/code]

Donc le problème se situe au niveau du contain de User pour le dernier post :

                    [code]'User' => array(
                        'fields' => 'User.displayname',
                        'contain' => false,
                    ),[/code]

Si j'enlève cette partie, mon code fonctionne (je n'ai pas encore forcé les join à ce stade). Et je n'arrive pas à comprendre pourquoi j'ai cette erreur à ce niveau là. Sachant que sans le paginate mais avec un find('all') je n'ai aucune erreur.

Merci d'avance, si vous avez des idées :p

Aucune réponse