Cakephp 2.0: Как предоставить инструкции ORDER BY для данных, полученных рекурсивно с помощью find ()? - PullRequest
1 голос
/ 27 декабря 2011

Я пытаюсь настроить модель с большим количеством отношений hasMany / hasOne, и я хотел бы, чтобы в раскрывающемся меню внутри "" были представлены собственные модели, в алфавитном порядке Добавить "просмотр. Я не уверен, как предоставить инструкции ORER BY моделям, которые рекурсивно извлекаются. Вот что я пробовал:

$services =  $this->service->find('all', array(
                                       'order'=>array(
                                               'Service.start_year DESC',
                                               'Servicecat.title DESC'
                                               ), 
                                        'recursive'=>0
                                          ) );

Но, конечно, это не дает никаких изменений. У меня есть подозрение, что это не очень сложно, я просто не могу найти решение в кулинарной книге / API. Идеи? * * 1006

1 Ответ

5 голосов
/ 27 декабря 2011

Вы можете сделать это несколькими способами.Я предпочитаю использовать сдерживаемое поведение для моделей, а затем оно позволяет вам точно контролировать, как модели извлекаются.Вы также можете настроить порядок в определении отношений вашей модели.

Путь к модели

$hasMany = array(
    'Servicecat' => array(
        'order' => array(
            'Servicecat.title DESC'
        )
    )
);

Способ хранения

В вашемВ моделях установите для них поведение, которое можно содержать:

public $actsAs = array('Containable');

Затем, когда вы найдете на своем контроллере, вы можете явно указать, какие модели связаны.Вы можете использовать многомерные массивы для определения глубины рекурсии.

$services = $this->Service->find(
    'all',
    array(
        'contains' => array(
             'Servicecat' => array(
                 'order' => array('Servicecat.title' => 'DESC')
             )
         ),
         'order' => array('Services.start_year' => 'DESC')
    )
);
...