我有一个模型关联,其工作原理如下:
Users hasAndBelongsToMany Tags
我希望能够根据用户的标签对一组用户进行分页。用户可以拥有多个标签,请求的过滤器可能很复杂,即查询可以向所有标签A
和B
但不是C
的用户提出要求。通过在标记上使用分页(以便condiditions数组可以应用于Tag模型)并获取该标记子集中的用户,可以更方便地处理此问题。
然后在尝试分页时出现问题,因为我按照以下方式设置了分页:
$this->paginate = array(
'conditions' => $conditions,
'contain' => array('User'),
'limit' => 5,
);
$this->paginate('Tag')
然后分页完全符合预期,它会根据标记返回分页数组,但我想要的是用户分页。将分页切换为铰接在用户身上会产生一系列问题('这就是我之前使用的')。对于像这样的模型关系存在分页吗?我觉得这是cakephp可以做的事情。感谢任何帮助过的人。
答案 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
));