我有一个模型,文章,其中有很多摘要。我想加载10篇最新文章,对于每篇文章,要加载点数最多的摘要。我的函数如下所示:public function getArticles($category, $viewName) { $subArticles = $this->Articles->findByCategory($category)->contain([ 'Abstracts' => function ($q) { return $q ->select(['body', 'points', 'article_id']) ->where(['Abstracts.approved' => true]) ->limit(10) ->order(['Abstracts.points' => 'DESC']); } ]) ->limit(10) ->order(['Articles.created' => 'DESC']) ; $this->set( $viewName . 'Articles', $subArticles ); }我得到的结果虽然不是我想要的。查看SQL,首先CakePHP获取类别中所有内容的article.id(精细)。然后,CakePHP使用这10条文章进入摘要表。它刚找到了id,并要求获得投票数最高的10条摘要(属于那些文章)。问题是我希望每篇文章有1个摘要,而不是该类别中任何文章的10个摘要。我怎样才能解决这个问题?谢谢!编辑ndm建议这与在包含的模型上使用limit()重复,因此我在那里尝试了解决方案。即,我将其添加到我的模型中: $this->hasOne('TopAbstract', [ 'className' => 'Abstracts', 'foreignKey' => 'abstract_id', 'strategy' => 'select', 'sort' => ['TopAbstract.points' => 'DESC'], 'conditions' => function ($e, $query) { $query->limit(1); return $e; } ]);然后,我尝试使用contain(['TopAbstract'])查找按类别分类的Articles,只有这样才能杀死我的SQL。它死得很惨:Error: SQLSTATE[HY000]: General error: 1 near ")": syntax error调试甚至没有显示杀死它的查询,因此我不确定如何调试该查询?编辑跟自己说一点,但是错误肯定是在hasOne的“条件”部分中。我将其取出,效果很好。无法找到一个示例,说明应该如何在Internet上看。任何人有任何想法吗?
添加回答
举报
0/150
提交
取消