CakePHP Paginate按包含数据排序

时间:2018-05-10 22:53:52

标签: php mysql cakephp pagination paginator

这是一个跟踪用户爱好的简单应用程序。用户可以有许多爱好,这些爱好被组织成不同的爱好组。

所以我有4个相关的表:用户 users_hobbies 爱好 hobby_groups

用户通过users_hobbies连接表与爱好有很多属于多对的关系。 爱好属于一个业余爱好者群体,爱好群体拥有许多爱好

有道理,到目前为止很简单。

在UsersHobbiesController中,我有:

$paginate = [
    'contain' => [
        'Hobby' => [
            'fields' => ['id', 'name'],
            'HobbyGroup' => [
                'fields' => ['id', 'name']
            ]
        ]
    ]
];

另外,在我的index()函数中,我构建了分页。

$usersHobbies = $this->paginate('UsersHobby');
$this->set(compact('usersHobbies));

当我访问index.ctp View文件中的$ usersHobbies变量时,它具有构建输出表所需的数据。它看起来像:

array(
    (int) 0 => array(
        'UsersHobby' => array(...),
        'Hobby' => array(
            'id' => 'abc-def-ghi',
            'name' => 'Jet Skiing',
            'HobbyGroup' => array(
                'id' => 'oiuy-trew-qldf',
                'name' => 'Watersports'
            )
        )
    )
    ....
)

为了对输出表进行排序,我添加了一些排序列:

<th><?php echo $this->Paginator->sort('Hobby.name', 'Hobby'); ?></th>
<th><?php echo $this->Paginator->sort('Hobby.HobbyGroup.id', 'Hobby'); ?></th>

第一个标题用于对Hobby名称进行排序。但我不能获取第二个标题以排序HobbyGroup。有一种简单的方法可以做到这一点吗?

我在StackOverflow上搜索了几个小时,但似乎无法找到适合我的答案。感谢。

0 个答案:

没有答案