15

結合テーブルの並べ替えを使用した Cakephp のページネーションは、結合テーブル フィールドでは機能しません。ただし、カスタム SQL 結合クエリの場合は正常に機能します。出てくるのを手伝ってください。

以下のサンプル コードを参照してください。Artist.name テーブル フィールドに順番に参加しています。

$this->paginate = array(
        'fields' => array(
            'id', 
            'Song.title',
            'Song.date',
            'Artist.id AS artist_id',
            'Artist.name AS artist_name',
            'COUNT(SongViews.id) AS views'
        ),
        'group' => array('ArtistsSong.song_id'),
        'recursive' =>  0,
        'limit' =>  20,
        'joins' => array(
            array(
                'table' => 'tbl_artists_songs',
                'alias' => 'ArtistsSong',
                'conditions'=> array('Song.id = ArtistsSong.song_id')
            ),array(
                'table' => 'tbl_artists',
                'alias' => 'Artist',
                'conditions'=> array('Artist.id = ArtistsSong.artist_id')
            ),array(
                'table' => 'tbl_song_views',
                'alias' => 'SongViews',
                'type' => 'left',
                'conditions'=> array('SongViews.song_id = ArtistsSong.song_id')
            ),
        ),
        'order' => array('Artist.name'=>'asc')

    );
4

4 に答える 4

20

これは CakePHP のバグです。

ただし、やり方にはコツがあります。

プライマリ モデルに仮想フィールドを追加する必要があります。

プライマリ モデルが Song であると仮定すると、paginate を呼び出す前にこれを追加する必要があります。

$this->Song->virtualFields = array(
    'artist_name' => 'Artist.name'
);

これで、 で並べ替えることができますartist_name

于 2013-08-05T14:00:38.337 に答える