我有一個(gè)模型,文章,其中有很多摘要。我想加載10篇最新文章,對(duì)于每篇文章,要加載點(diǎn)數(shù)最多的摘要。我的函數(shù)如下所示: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 ); }我得到的結(jié)果雖然不是我想要的。查看SQL,首先CakePHP獲取類別中所有內(nèi)容的article.id(精細(xì))。然后,CakePHP使用這10條文章進(jìn)入摘要表。它剛找到了id,并要求獲得投票數(shù)最高的10條摘要(屬于那些文章)。問題是我希望每篇文章有1個(gè)摘要,而不是該類別中任何文章的10個(gè)摘要。我怎樣才能解決這個(gè)問題?謝謝!編輯ndm建議這與在包含的模型上使用limit()重復(fù),因此我在那里嘗試了解決方案。即,我將其添加到我的模型中: $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調(diào)試甚至沒有顯示殺死它的查詢,因此我不確定如何調(diào)試該查詢?編輯跟自己說一點(diǎn),但是錯(cuò)誤肯定是在hasOne的“條件”部分中。我將其取出,效果很好。無法找到一個(gè)示例,說明應(yīng)該如何在Internet上看。任何人有任何想法嗎?
如何限制每個(gè)記錄/組包含的關(guān)聯(lián)?
森欄
2019-11-02 10:50:29