Cakephp2 - естественная сортировка по сильным числам

1

У меня есть такой запрос:

$a = $this->Gallery->find('all',array (
        'conditions'=>array('Gallery.id'=>$matches[1]),
        'contain' => array('Photo'=>array('fields'=>array('Photo.name'),
            'order'=>array('Photo.name'=>'ASC')
        ))));

Этот код получает галереи по id и связанным фотографиям. Я хочу сортировать фотографии по имени, и теперь я получаю, например, следующее:

1.jpg 11.jpg 12.jpg 2.jpg

Итак, как видите, это не естественная сортировка. Я искал информацию, как я могу ее архивировать, но без успеха. Я предполагаю, что мне нужно изменить:

'order'=>array('Photo.name'=>'ASC')

Спасибо за помощь.

  • 0
    Можете ли вы показать содержимое базы данных? Какие имена? Если имена такие, как вы указали, это будет означать, что все будет в порядке.
  • 0
    Может помочь: stackoverflow.com/questions/3771866/…
Теги:
cakephp
cakephp-2.0

2 ответа

1
Лучший ответ

Не уверен, что это полностью поможет вашей проблеме, но вы можете попытаться применить естественную сортировку базы данных MySQL, сначала отсортировав по длине:

'order' => array(
    'LENGTH(Photo.name)' => 'ASC',
    'Photo.name' => 'ASC'
)
1

Я думаю, вам нужно попробовать под кодом.

Просто одно отличие. 'order'=>array('FIELD(Photo.name)'=>'ASC')

     $a =   $this->Gallery->find('all',array (
            'conditions'=>array('Gallery.id'=>$matches[1]),
            'contain' => array(
                'Photo'=> array(
                    'fields'=>array('Photo.name'),
                    'order'=>array('FIELD(Photo.name)'=>'ASC')
                ),
                )
            )
        );

Надеюсь, это сработает для вас. Дайте мне знать, если вы не решите свою проблему.

Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню