1

我有一个模型关联,其工作方式如下:

Users hasAndBelongsToMany Tags

我希望能够根据他们的标签对一组用户进行分页。用户可以有许多标签,并且请求的过滤器可能很复杂,即查询可以要求所有带有标签的用户AB但不能C。通过在标签上使用分页(以便条件数组可以应用于标签模型)并取回该标签子集中的用户,它更易于处理。

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

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

$this->paginate('Tag')

所以分页完全符合预期,它返回基于标签的分页数组,但我想要的是由用户分页。将分页切换为取决于用户会产生一系列问题(“这就是我之前使用的”)。像这样的模型关联只存在分页吗?我觉得这是 cakephp 可以做的事情。感谢任何提供帮助的人。

4

2 回答 2

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;
    }
于 2013-10-14T07:42:49.173 回答
1

您应该使用自定义查找器:cakephp 文档链接。在用户模型中的示例中,创建受保护的功能:

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
)); 
于 2013-10-14T07:44:11.693 回答