Find neighbors ne fonctionne pas

Par charlie404, il y a 11 ans


Bonjour,

Je souhaiterais faire un find('neighbors') dans la fonction view de PostsController pour avoir l'article suivant et précédent, mais ça fonctionne pas !

Voici mon code :

$neighbors = $this->Post->find('neighbors',array( array( 'field' => 'id', 'value' => $id, 'order' => array('Post.date' => 'DESC'), 'fields' => array('Post.id', 'Post.slug'), 'conditions' => array('Post.id' => $id), 'recursive' => 0 ) ));

Dans le tableau, l'index ['prev'] est toujours vide et dans l'index ['next'] j'ai le post avec l'id 1.
La recursive ne fonctionne pas et il me sort tous les champs !

Si quelqu'un à une solution ?
Merci d'avance :)

9 réponses

Grafikart, il y a 11 ans

Pourquoi faire un array de array ?

charlie404, il y a 11 ans

Merci Grafikart pour ta réponse.

Effectivement, il y'avait un porblème avec le array.
Du coup, avec ce code :

$neighbors = $this->Post->find('neighbors',array( 'field' => 'id', 'value' => $id, 'order' => array('Post.date' => 'DESC'), 'fields' => array('Post.id', 'Post.slug') ) );

Ça marche mieux, mais je voudrais les articles précédent et suivant selon la date et pas l'id.
Mais la doc de cakePHP ne donne pas trop d'indications sur find('neighbors').

Grafikart, il y a 11 ans

Essaie d'inclure la date dans les champs à chercher

$neighbors = $this->Post->find('neighbors',array( 'field' => 'id', 'value' => $id, 'order' => 'Post.date DESC', 'fields' => array('Post.id', 'Post.slug', 'Post.date') ) );
charlie404, il y a 11 ans

Ça trie toujours avec l’id.

Grafikart, il y a 11 ans

Et si dans field tu met date ?

charlie404, il y a 11 ans

ça marche sauf s'il y'a plusieurs article le même jour.
Et en rajoutant une conditions sur l'id, ça retourne un tableau vide.

$neighbors = $this->Post->find('neighbors',array( 'field' => 'date', 'value' => $tab['Post']['date'], 'order' => 'Post.date DESC', 'fields' => array('Post.id', 'Post.slug', 'Post.date'), 'conditions' => array('Post.id' => $id) ) ); /app/Controller/PostsController.php (line 52) array( 'prev' => null, 'next' => null )
Grafikart, il y a 11 ans

Tu as regardé la requête l'order est bien pris en compte ?

charlie404, il y a 11 ans

Non, mais je pense que les paramètres 'conditions', 'fields', 'order'... sont pour le résultat (prev et next).
Du coup, la condition pour les posts prev et next est 'Post.online = 1'.

Est-ce que le find('neighbors') ne servirait pas que pour les champs avec une valeur unique (genre id) !?

charlie404, il y a 11 ans

Ou sinon faire un champ position qui serait mis à jour à chaque modification d'un post.