我有一个模型,文章,其中有很多摘要。我想加载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上看。任何人有任何想法吗?