【问题标题】:Cakephp Pagination on containable relationshipCakephp对可包含关系的分页
【发布时间】:2013-10-21 11:46:57
【问题描述】:

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

Users hasAndBelongsToMany Tags

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

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

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

$this->paginate('Tag')

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

【问题讨论】:

  • 你能不能把它换成另一种方式并输入一个条件,所以选择User,它是Tag
  • @scrowler 不,我试过了,它会产生自己的一系列问题。这是一种解决方法,我认为必须要覆盖分页方法,但我不知道该怎么做。

标签: php cakephp pagination cakephp-2.0


【解决方案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
)); 

【讨论】:

    【解决方案2】:

    将其放入模型中。

    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;
        }
    

    【讨论】:

    • 好吧,这看起来很有趣也很有用。我正在寻找如何调用这个 paginateCount 方法。我如何确保使用这个而不是 Cake's?
    猜你喜欢
    • 2012-09-02
    • 2018-10-21
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2011-06-16
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多