Skip to content

Wie kann ich ein n+1 query Problem mit YORM auflösen? #11

Answered by gharlan
staabm asked this question in Q&A
Discussion options

You must be logged in to vote

Mit dem Aufruf von populateRelation vor der foreach-Schleife, kann man alle verknüpften Datensätze der jeweiligen Relation vorladen:

$products = Product::query()->find();
$products->populateRelation('category_id'); // <---

foreach ($products as $product) {
    echo $product->name;
    echo $product->description;

    $category = $product->getRelatedDataset('category_id');
    echo $category->name;
}

So hat man konstant zwei DB-Abfragen (statt bis zu n+1). Eine für die Produkte, und eine für alle benötigen Kategorien zusammen.

Immer wenn man getRelatedDataset oder getRelatedCollection innerhalb einer Schleife aufruft, sollte man stutzig werden. In der Regel ist dann populateRelation eine …

Replies: 1 comment 1 reply

Comment options

You must be logged in to vote
1 reply
@gharlan
Comment options

Answer selected by staabm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants