Bonjour,

Mon application se présente de la manière suivante :

  • Modèle Course hasMany Dates (autre modèle).

(Pour le moment, dans mon modèle Course :

public $hasMany = array('Date' => array(
            'order' => 'Date.date ASC'
        )
);

)

  • Lorsque je fais un $this->Course->find('all', ...), j'obtiens bien chacun de mes cours avec ses multiples dates sous la forme prévue :

    array(
    (int) 0 => array(
    'Course' => array(
    'id' => '112',
    'created' => '2012-02-18 23:00:00',
    'statut' => 'Actif',
    'lieu' => 'mon-lieu',
    'prix' => 'mon-prix',
    ),
    'Date' => array(
    (int) 0 => array(
    'id' => '1',
    'created' => '2012-02-18 23:00:00',
    'course_id' => '112',
    'jour' => '1',
    'date' => '2015-02-27',
    'heure_debut' => '18:00:00',
    'heure_fin' => '20:00:00'
    ),
    (int) 1 => array(
    'id' => '2',
    'created' => '2012-02-18 23:00:00',
    'course_id' => '112',
    'jour' => '2',
    'date' => '2015-02-28',
    'heure_debut' => '18:00:00',
    'heure_fin' => '20:00:00'
    )
    )
    )
    (int) 1 => array(
    ...

Mon problème est que j'aimerais ordonner mes évènements selon leurs dates respectives :

Cours 1 : jour 1 -> 2015-02-27
Cours 2 : jour 1 -> 2015-03-03
Cours 3 : jour 1 -> 2015-03-10
[etc.]

Pour l'instant, cela ordonne les dates au sein d'un même enregistrement au lieu de le faire au niveau global. J'ai cherché sur la doc cakephp mais le type d'ordre que je désire effectuer (ordonner les enregistrements du modèle "course" selon les enregistrements du modèle associé "dates") n'a pas l'air très commun. Je suis donc coincé :( Je pourrais recourir à une requête forcée mais j'aimerais d'abord savoir s'il est possible de trier mes entrées plus proprement.

Quelqu'un a-t-il une idée ?

Merci d'avance

4 réponses


filopp
Réponse acceptée

Salut,
Tu peux faire ta requête telle qu'elle est et ensuite la ré-ordonner en utilisant la classe Hash. Jette un oeil sur celle-ci dans la doc cake : ici Une classe que j'utilise très souvent pour ce genre de traitement et qui évite un tas de foreach...

Coucou,
dans ton find('all'....), tu rajoute dans ton tableau d'option un 'order' => 'Date.date ASC'
Normalement ca devrait passer vu qu'il fera le trie dans la requete avec jointure et non que sur le model qui est lié

Enfin je pense... j'ai jamais eu ce cas de figure à traiter

kinkaz
Auteur

Hello,

Merci pour ta réponse. En fait il ne m'est pas possible d'ordonner depuis le find qui est effectué depuis le modèle 'Course' (je ne peux ordonner que selon des éléments du modèle 'Course' sauf erreur). Si je mets l'order à l'intérieur du modèle (dans l'association), ça ne trie pas correctement non plus.

Je crois qu'à mon regret, je vais me contenter d'une requête dite "forcée".

kinkaz
Auteur

Merci filopp !

Dans l'intervalle j'avais tout ré-ordonné avec plein de foreach... Je ne connaissais pas cette classe. Ma solution marche pour le moment, mais je vais refaire tout ça plus proprement avec la classe Hash. Vraiment top, merci pour l'astuce !