2014-11-20 45 views
1

我得到了与连接表ArticlesUserCakePHP的顺序查找()的统计结果和日期条件

在articles_users表有article_id的,USER_ID和创建文章和用户之间的关系HABTM。 现在我试图通过每篇文章的article_id(在ArticlesUser连接表中)的计数来命令我的$ this-> Article-> find('all',...)的结果。简而言之,我想按照喜欢的方式对文章进行排序。此外,如果只考虑过去两天的喜好(创建色彩),那将是非常棒的。

这是可能的cakephp没有使用查询吗?

编辑:

文章和用户之间的关系HABTM是我“喜欢”的关系,所以连接表是我喜欢的表。 1文章可以被n个用户喜欢,1个用户可以喜欢m篇文章。现在,我试图通过最近两天的user_id(来自连接表)的计数,在具有不同(现有)条件的find()命令中对我的文章进行排序。 因此,文章的顺序依赖于连接表中每篇文章的(唯一)user_id的数量。

我希望这可以让它更清晰一点!

+0

使用计数结果的别名,然后按顺序。 – 2014-11-20 18:14:24

+0

我试图用连接,'fields'=> count(),虚拟字段或单独的查询来解决它(这可行,但那不是cakephp的意义),但是它的错误方法或者是它错了。 – tobysas 2014-11-20 20:37:50

+0

分享解决此问题的查询,然后有人可能会提供Cakephp中心解决方案。 – AgRizzo 2014-11-21 11:53:15

回答

0

我们肯定需要更多的细节。如果你添加更多的细节(模型,喜欢哪里等),那么我甚至可以为你写控制器代码。

要简单回答排序问题,您可以使用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']; 

请记住,您可以忽略这个编辑之前的一切,因为你的成绩就已经被排序查询。

最好, 瑞安

+1

感谢您的帮助!我用一些额外的信息改进了我的问题..我希望这可能有所帮助 – tobysas 2014-11-21 15:41:36