在Cakephp视图中订购相关元素

时间:2014-06-09 12:07:28

标签: cakephp cakephp-2.3

我有专辑和图片模型。专辑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列未按顺序排列。

2 个答案:

答案 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'));