Как ограничить количество ассоциаций для каждой записи / группы?

У меня есть модель, статьи, в которой есть много тезисов. Я хочу загрузить 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 входит в таблицу Abstracts, используя эти 10 article.id, которые он только что нашел, и запрашивает 10 Abstracts с наибольшим количеством голосов (принадлежащих этим статьям).

Проблема в том, что я хочу 1 реферат для каждой статьи, а не 10 тезисов, принадлежащих какой-либо статье в этой категории. Как я могу это исправить? Благодарность

РЕДАКТИРОВАТ

ndm предположил, что это дубликат Использование лимита () для содержащейся модели поэтому я попытался найти там решение. А именно, я добавил это в свою модель:

 $this->hasOne('TopAbstract', [
            'className' => 'Abstracts',
            'foreignKey' => 'abstract_id',
            'strategy' => 'select',
            'sort' => ['TopAbstract.points' => 'DESC'],
            'conditions' => function ($e, $query) {
            $query->limit(1);
            return $e;
    } ]);

А потом я пытаюсь найти статьи по категориям, содержащие (['TopAbstract']), только это убивает мой SQL. Умирает ужасной смертью:

Error: SQLSTATE[HY000]: General error: 1 near ")": syntax error

Debug даже не показывает запрос, который его убил, поэтому я не уверен, как его отладить?

РЕДАКТИРОВАТ

Говорю немного, но ошибка определенно в части «условий» hasOne. Я вытащил это, и это прекрасно работает. Не могу найти пример того, как это должно выглядеть на веб-сайтах ... у кого-нибудь есть идеи?

Ответы на вопрос(1)

Ваш ответ на вопрос