相关疑难解决方法(0)

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

我有一个模型,文章,其中有很多摘要.我想加载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 );
    }
Run Code Online (Sandbox Code Playgroud)

我得到的结果不是我想要的.通过SQL,首先CakePHP获取了类别中所有内容的articles.id(很好).然后,CakePHP进入Abstracts表,使用那10篇文章.它刚刚找到,并要求获得最高票数的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;
    } ]);
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用contains(['TopAbstract'])找到Articles byCategory,只有这会杀死我的SQL.它死于可怕的死亡:

Error: SQLSTATE[HY000]: General error: 1 …
Run Code Online (Sandbox Code Playgroud)

orm cakephp associations query-builder cakephp-3.0

10
推荐指数
1
解决办法
5168
查看次数

标签 统计

associations ×1

cakephp ×1

cakephp-3.0 ×1

orm ×1

query-builder ×1