CakePHP与HABTM关系的分页

时间:2011-08-12 18:14:37

标签: cakephp pagination

我有'俱乐部'HABTM'会员'关系。

从ClubsController :: View($ id)视图。我希望在分页表中显示属于该ONE俱乐部的所有会员。我尝试过很多东西,但都不是我想要的。最常见,看似相关的解决方案看起来像CakePHP multi-HABTM associations with pagination但这会给我所有来自ClubsController的属于''会员'的'俱乐部'。与来自ClubsController的ONE'Club'的所有'会员'相同。我觉得这应该是一项显而易见的任务。

2 个答案:

答案 0 :(得分:2)

我回答是因为我无法评论Meibooms的回答。 这是错误的,因为不应该有Member.club_id字段作为 HABTM 关系。 相反,您应该拥有的是一个联接表:ClubsMembers.club_id ClubsMembers.member_id

正如您提到的相关问题的答案中所解释的,您需要做的是绑定假的hasOne关系,以便能够设置您想要的条件。

在您的特定情况下:

        $this->Club->Member->bindModel(array(
            'hasOne' => array('ClubsMember')
        ), false);

        // Set up the paginate options array
        $this->paginate['Member'] = array(
            'contain' => array(
                'ClubsMember',
            ),
            'conditions' => array(
                'ClubsMember.club_id' => $club_id,
            ),
            //Group since the HasOne may return multiple rows for each
            //(if $club_id is an array of IDs and a Member is in more than one of those).
            'group' => 'Member.id',
            'order' => 'Member.name',
        );

        $this->set('members', $this->paginate('Member'));

如果您不使用contain,请忽略ContainableBehavior部分。 (无论如何,蛋糕会忽略它。)

答案 1 :(得分:0)

听起来像会员的简单分页,条件为'Member.club_id'=> $ id应该为你做到这一点。

PS。您使用的是哪个版本的CakePHP?较新的版本更加复杂,分页为afaik。