Cakephp Pagination在可控制的关系上

时间:2013-10-13 22:58:00

标签: php cakephp pagination cakephp-2.0

我有一个模型关联,其工作原理如下:

Users hasAndBelongsToMany Tags

我希望能够根据用户的标签对一组用户进行分页。用户可以拥有多个标签,请求的过滤器可能很复杂,即查询可以向所有标签AB但不是C的用户提出要求。通过在标记上使用分页(以便condiditions数组可以应用于Tag模型)并获取该标记子集中的用户,可以更方便地处理此问题。

然后在尝试分页时出现问题,因为我按照以下方式设置了分页:

$this->paginate = array(
    'conditions' => $conditions, 
    'contain' => array('User'), 
    'limit' => 5, 
);

$this->paginate('Tag')

然后分页完全符合预期,它会根据标记返回分页数组,但我想要的是用户分页。将分页切换为铰接在用户身上会产生一系列问题('这就是我之前使用的')。对于像这样的模型关系存在分页吗?我觉得这是cakephp可以做的事情。感谢任何帮助过的人。

2 个答案:

答案 0 :(得分:1)

将其放入模型中。

function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
        $parameters = compact('conditions');
        $this->recursive = $recursive;
        $count = $this->find('count', array_merge($parameters, $extra));
        if (isset($extra['group'])) {
            $count = $this->getAffectedRows();
        }
        return $count;
    }

答案 1 :(得分:1)

您应该使用自定义查找程序:cakephp documentation link。在用户模型的示例中,创建受保护的函数:

protected function _findUsersByTag($state, $query, $results = array()) {
    if($state == 'before') {
       $query['joins'] = array(
          'Tag' => array('type' => 'inner', 'alias' => 'Tag', 'table' => 'tags', 'conditions' => array('Users.tag_id = Tag.id')
       );
     return $query; 
    }

    return $results;
}

第二次添加用户模型:

public $findMethods = array('usersByTag' =>  true);

在控制器中你定义你使用自定义查找器使用0索引数组或2.3和更高蛋糕版本属性findType:

public $pagination = array('User' => array(
   'usersByTag',
   'limit' => 5, 
   'conditions' => $conditions
));