Bonjour à tous, J'ai un petit soucis avec CakePHP dans la remonté de certaines de mes données, voilà une petite explication : [u]J'ai 3 models :[/u] Shop WorkingHour Day** [u]Avec les liaisons suivantes :[/u] Shop (hasMany) WorkingHour WorkingHour (belongsTo) Day** [u]Ainsi :[/u] [code]$this->Shop->contain(array('WorkingHour', 'WorkingHour.Day')); $shop = $this->Shop->findById($id);[/code] [u]Me retourne bien:[/u] [code]array( 'Shop' => array( ... ), 'WorkingHour' => array( (int) 0 => array( 'id' => '1', 'day_id' => '1', ..., 'Day' => array( 'id' => '1', 'name' => 'days.monday', 'position' => '0' ) ), (int) 1 => array( 'id' => '2', 'day_id' => '2', ..., 'Day' => array( 'id' => '2', 'name' => 'days.tuesday', 'position' => '1' ) ), (int) 2 => array( 'id' => '3', ..., 'day_id' => '3', 'Day' => array( 'id' => '3', 'name' => 'days.wednesday', 'position' => '2' ) ), (int) 3 => array( 'id' => '4', 'day_id' => '4', ..., 'Day' => array( 'id' => '4', 'name' => 'days.thursday', 'position' => '3' ) ), (int) 4 => array( 'id' => '5', ..., 'day_id' => '6', 'Day' => array( 'id' => '6', 'name' => 'days.saturday', 'position' => '5' ) ), (int) 5 => array( 'id' => '6', 'day_id' => '6', ..., 'Day' => array( 'id' => '6', 'name' => 'days.saturday', 'position' => '5' ) ), (int) 6 => array( 'id' => '7', 'day_id' => '7', ..., 'Day' => array( 'id' => '7', 'name' => 'days.sunday', 'position' => '6' ) ), (int) 7 => array( 'id' => '8', 'day_id' => '5', ..., 'Day' => array( 'id' => '5', 'name' => 'days.friday', 'position' => '4' ) ) ) )[/code] [u]Mon problème :[/u] Si un utilisateur rajoute une plage horaire de travail comme le dernier INSERT (id : 7), l'ordre n'est plus bon. Je cherche le moyen d'avoir l'index "WorkingHour" toujours classé par "Day.position". J'ai essayé [code]public $belongsTo = array( 'Day' => array( 'Order' => 'Day.position ASC' ) );[/code] Mais ça ne change rien... Vous auriez une idée ? Merci d'avance à tous ! Sylvain

4 réponses


Bonjour.
As-tu essayé avec "order" en minuscule et non avec la première lettre en majuscule ?
Je ne sais pas trop si c'est important pour CakePHP, mais sur la doc c'est en minuscule.
Donc au lieu de :

public $belongsTo = array(
    'Day' => array(
        'Order' => 'Day.position ASC'
    )
);

Mets plutôt

public $belongsTo = array(
    'Day' => array(
        'order' => 'Day.position ASC'
    )
);

Merci pour ta réponse déjà,

J'ai toujours le même soucis avec "order" écrit en minuscule,

Je continue de chercher, je posterais la solution si je la trouve :)

Essaye en utilisant Hash::sort

$shop'WorkingHour'] = Hash::sort($shop'WorkingHour'], '{n}.Day.position', 'asc');
$this->Shop->find('all', array(
    'contain' => array(
        'WorkingHour' => array(
            'Day',
            'order' => 'Day.position ASC'
        )
    ),
    'conditions'=>array('Shop.id'=>$id)
));