Wie kann ich die Anzahl der enthaltenen Assoziationen pro Datensatz / Gruppe begrenzen?

Ich habe ein Modell, Artikel, die viele Abstracts hat. Ich möchte die 10 neuesten Artikel und für jeden Artikel den Abstract mit der höchsten Punktzahl laden. Meine Funktion sieht so aus:

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 );
    }

Das Ergebnis, das ich bekomme, ist jedoch nicht das, was ich beabsichtige. Durchsucht man die SQL, erhält CakePHP zunächst die articles.id von allem in der Kategorie (fine). Dann geht CakePHP mit den 10 gefundenen Artikeln in die Tabelle Abstracts und fragt nach den 10 Abstracts mit den höchsten Stimmen (die zu diesen Artikeln gehören).

Das Problem ist, dass ich 1 Abstract für jeden Artikel haben möchte, nicht die 10 Abstracts, die zu einem Artikel in dieser Kategorie gehören. Wie kann ich das beheben? Vielen Dank

BEARBEITE

ndm schlug vor, dass dies ein Duplikat von @ wBenutzung von limit () für das enthaltene Modell also habe ich dort die lösung versucht. Das habe ich nämlich meinem Model hinzugefügt:

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

Und dann versuche ich, die Artikel nach Kategorie zu finden, mit include (['TopAbstract']), nur das bringt mein SQL zum Erliegen. Es stirbt ein schrecklicher Tod:

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

Debug zeigt nicht einmal die Abfrage an, die es beendet hat, also bin ich mir nicht sicher, wie ich diese debuggen soll?

BEARBEITE

Talking zu mir selbst ein bisschen, aber der Fehler ist definitiv in den "Bedingungen" Teil der hasOne. Ich nehme das raus und es funktioniert gut. Sie finden kein Beispiel dafür, wie dies in den Interwebs aussehen soll. Hat jemand eine Idee?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage