为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森栏 2019-11-02 10:50:29
我有一个模型,文章,其中有很多摘要。我想加载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上看。任何人有任何想法吗?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 403 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信