Подтвердить что ты не робот

Cakephp pagination с сортировкой поля таблицы соединений не работает

Cakephp pagination с сортировкой таблицы соединений не работает для полей таблицы соединений. Но для пользовательского 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')

    );
4b9b3361

Ответ 1

Это ошибка в CakePHP.

Однако, есть трюк, чтобы сделать это.

Вы должны добавить виртуальное поле в свою основную модель.

Предполагая, что ваша основная модель - это песня, вы должны добавить ее перед вызовом paginate:

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

И теперь вы можете сортировать по artist_name.