我们肯定需要更多的细节。如果你添加更多的细节(模型,喜欢哪里等),那么我甚至可以为你写控制器代码。
要简单回答排序问题,您可以使用CakePHP内置的函数。在这种情况下,如果你有:
array(
[0] => array(
['Article'] => array(
['blah'] => 'blah',
['blah2'] => 'blah',
),
['ArticleUser'] => array(
['created'] => 'blh'
)
)
);
那么你可以使用:
Set::sort($results, '{n}.ArticleUser.created', 'DESC');
使用CakePHP的内置功能将重新建立自己的阵列,使得无论你想要的排序顺序。你可以看到更多的CakePHP真棒内置阵列功能在这里:
http://book.cakephp.org/2.0/en/core-utility-libraries/set.html#Set::sort
另外,请记住,即使你有一个HABTM关系,你不能使用的条件下加入或关系(尤其是对数) 。根据您当前的设置,您可能必须在查询中手动编写'连接',或使用可容忍的行为。
最佳, 瑞安
编辑:
试试这个。
$joins = array(
array(
'table' => 'articles_users',
'alias' => 'ArticleUser',
'type' => 'inner',
'conditions' => array(
'Article.id = ArticleUser.article_id',
)
)
);
$this->Artical->find('all', array(
'conditions' => array(
'ArticleUser.created >' => $this->Time->fromString('-2 days')
),
'joins' => $joins,
'fields' => array('Article.*', 'COUNT(Article.id) as Article.likes'),
'group' => 'Article.id',
'order' => 'ArticleUser.created DESC'
)
);
如果一切正常,你应该让你的“喜欢”为每篇文章最后2天在
Article['likes'];
请记住,您可以忽略这个编辑之前的一切,因为你的成绩就已经被排序查询。
最好, 瑞安
使用计数结果的别名,然后按顺序。 – 2014-11-20 18:14:24
我试图用连接,'fields'=> count(),虚拟字段或单独的查询来解决它(这可行,但那不是cakephp的意义),但是它的错误方法或者是它错了。 – tobysas 2014-11-20 20:37:50
分享解决此问题的查询,然后有人可能会提供Cakephp中心解决方案。 – AgRizzo 2014-11-21 11:53:15