如何限制每个记录/组包含的关联?

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


森栏
浏览 404回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP