2013-06-07 9 views
13

テーブルテーブルの結合フィールドでCakephpのページ分割が機能していません。しかし、カスタムSQLのクエリを正常に動作します。出てくるのを助けてください。Cakephpのページテーブルの結合テーブルのフィールドソートが機能していません

以下のサンプルコードを参照してください。Artist.nameのjoin tableフィールドが順番にあります。

$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') 

    ); 
+0

...何が出てくるの?いくつかのコードを提供し、あなたが望むものをより良く説明してください、2行の "質問"を手助けするのは難しいです – Nunser

+0

サンプルコードを追加しました。それを確認してください。ありがとう –

答えて

16

これはCakePHPのバグです。

しかし、それを行うにはトリックがあります。

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

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

そして今、あなたはartist_nameで並べ替えることができます。あなたがのpaginateを呼び出す前にこれを追加する必要があり、あなたの主なモデルが歌であると仮定すると、

+0

ソートに仮想フィールドを使用することはできません.. CakePHPマニュアルを読む - http://book.cakephp.org/2.0/en/models/virtual-fields.html#limitations-of-virtualfields –

+0

フィールドごとに並べ替えます。これは私の場合の助けになります – Dashrath

+1

これは生命の犠牲者であり、並べ替えと改ページのために完璧に働いた、ありがとう! – WOUNDEDStevenJones

関連する問題