我有一個模型,文章,其中有很多摘要。我想加載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
提交
取消