我有专辑和图片模型。专辑HasMany图片。图片属于专辑。 我点击了一张专辑的VIEW,它显示了专辑名称,一般,年份等。
下面显示相关图片。所以我想要做的是找到一种方法来根据特定列(排序)对相关图片进行排序。
相册 id | name | genere | year
图片 id| albim_id | picture | sort .
这是find()语句:
public function view($id = null) {
if (!$this->Album->exists($id)) {
throw new NotFoundException(__('Album not Valid!'));
}
$options = array(
'conditions' =>array(
'Album.'. $this->Album->primaryKey => $id
),
'contain' => array(
'Picture' => array(
'order' => array(
'Picture.sort' => 'ASC'
)
)
)
);
$this->set('album', $this->Album->find('first', $options));
}
但仍然没有按照专辑视图中的升序排序图片。 当我做一个调试($ albums);我明白了:
'AlbumPictures' => array(
(int) 0 => array(
'id' => '162',
'album_id' => '80',
'pic_path' => '14022988892.jpg',
'sort' => '7',
),
(int) 1 => array(
'id' => '163',
'album_id' => '80',
'pic_path' => '140229888922sYSpcukDw.jpg',
'sort' => '1',
),
(int) 2 => array(
'id' => '164',
'album_id' => '80',
'pic_path' => '1402298889facebook-default-no-profile-pic.jpg',
'sort' => '4',
),
(int) 3 => array(
'id' => '165',
'album_id' => '80',
'pic_path' => '1402298889holder.png',
'sort' => '5',
),
(int) 4 => array(
'id' => '167',
'album_id' => '80',
'pic_path' => '1402298890profile.jpg',
'sort' => '6',
),
(int) 5 => array(
'id' => '170',
'album_id' => '80',
'pic_path' => '1402298890Untitled-15.png',
'sort' => '2',
),
(int) 6 => array(
'id' => '171',
'album_id' => '80',
'pic_path' => '1402298890Untitled-17.png',
'sort' => '3',
)
)
如您所见,sort
列未按顺序排列。
答案 0 :(得分:2)
在您的相册模型中,您可以指定相关图片的顺序。
应用/型号/ Album.php 强>
public $hasMany = array(
'Pictures' => array(
'className' => 'Pictures',
'foreignKey' => 'album_id',
'order' => array('sort' => 'asc' ),
)
);
希望这会有所帮助; - )
答案 1 :(得分:0)
对于其他案例,我的方式更容易处理:
$this->Album->recursive=-1;
$album= $this->Album->find('first',
array('joins'=>array(array('type'=>'INNER','table'=>'pictures','alias'=>'Picture',
'conditions'=>array('Album.id=Picture.album_id','Album.id='.$id))),
'order'=>'Picture.sort ASC'));