gpt4 book ai didi

sorting - Cakephp分页按计算字段排序(COUNT)

转载 作者:行者123 更新时间:2023-12-01 22:27:51 26 4
gpt4 key购买 nike

在 cakephp 1.3 中使用计算字段(例如 COUNT())时,我在对分页列表进行排序时遇到问题

假设我有两个模型:文章和评论(1 篇文章 x N 条评论),我想显示文章的分页列表,包括每篇文章的评论数。我想要这样的东西:

Controller :

$this->paginate = array('limit'=>80,
'recursive'=>-1,
'fields'=>array("Article.*","COUNT(Comment.id) as nbr_comments"),
'joins'=>array(array( 'table' => 'comments',
'alias' => 'Comment',
'type' => 'LEFT',
'conditions' => array('Comment.article_id = Article.id'))
),
'group'=>"Article.id"
);

(我必须覆盖 findCount() 方法才能使用 group by 进行分页)

问题是在 View 中,sort() 方法不起作用:

<th><?php echo $this->Paginator->sort('nbr_comments');?></th> //life is not that easy

我能够通过“欺骗”分页和排序来创建解决方法:

Controller

$order = "Article.title";
$direction = "asc";
if(isset($this->passedArgs['sort']) && $this->passedArgs['sort']=="nbr_comments")
$order = $this->passedArgs['sort'];
$direction = $this->passedArgs['direction'];
unset($this->passedArgs['sort']);
unset($this->passedArgs['direction']);
}
$this->paginate = array(... 'order'=>$order." ".$direction, ...);
$this->set('articles', $this->paginate());
if($order == "clicks"){
$this->passedArgs['sort'] = $order;
$this->passedArgs['direction'] = $direction;
}

查看

<?php $direction = (isset($this->passedArgs['direction']) && isset($this->passedArgs['sort']) && $this->passedArgs['sort'] == "nbr_comments" && $this->passedArgs['direction'] == "desc")?"asc":"desc";?>
<th><?php echo $this->Paginator->sort('Hits','clicks',array('direction'=>$direction));?></th>

它确实有效……但对于开发人员应该透明的东西来说,代码似乎太多了。 (感觉就像我在做蛋糕的工作)所以我问是否有另一种更简单的方法。也许 cake 有这个功能,但决定隐藏它.. o_O .. 文档中没有任何关于此的内容,而且我还没有在 S.O 上找到另一个好的解决方案...你是怎么做到的?

提前致谢!

最佳答案

也许你的问题可以用 Virtual fields 来解决?

如果您为计算字段创建自定义字段,您将能够在该自定义字段上使用 Paginator->sort() 方法进行排序。

我找到了解决方案 there在评论中(不需要使用自定义字段而不是在adnan的初始解决方案中自定义分页方法等)。

关于sorting - Cakephp分页按计算字段排序(COUNT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6018233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com