У меня есть такой запрос:
$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')
Спасибо за помощь.
Не уверен, что это полностью поможет вашей проблеме, но вы можете попытаться применить естественную сортировку базы данных MySQL, сначала отсортировав по длине:
'order' => array(
'LENGTH(Photo.name)' => 'ASC',
'Photo.name' => 'ASC'
)
Я думаю, вам нужно попробовать под кодом.
Просто одно отличие. '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')
),
)
)
);
Надеюсь, это сработает для вас. Дайте мне знать, если вы не решите свою проблему.
Благодарю.