1
0
mirror of https://github.com/flarum/core.git synced 2025-05-17 20:59:44 +02:00

perf: Allow eager loading posts relations of GET discussion endpoint ()

This commit is contained in:
Sami Mazouz 2021-08-23 20:33:21 +01:00 committed by GitHub
parent 6defca5a6d
commit d333d0b0e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 8 deletions

@ -148,13 +148,9 @@ abstract class AbstractSerializeController implements RequestHandlerInterface
abstract protected function createElement($data, SerializerInterface $serializer);
/**
* Eager loads the required relationships.
*
* @param Collection $models
* @param array $relations
* @return void
* Returns the relations to load added by extenders.
*/
protected function loadRelations(Collection $models, array $relations): void
protected function getRelationsToLoad(): array
{
$addedRelations = [];
@ -164,6 +160,20 @@ abstract class AbstractSerializeController implements RequestHandlerInterface
}
}
return $addedRelations;
}
/**
* Eager loads the required relationships.
*
* @param Collection $models
* @param array $relations
* @return void
*/
protected function loadRelations(Collection $models, array $relations): void
{
$addedRelations = $this->getRelationsToLoad();
if (! empty($addedRelations)) {
usort($addedRelations, function ($a, $b) {
return substr_count($a, '.') - substr_count($b, '.');

@ -187,12 +187,21 @@ class ShowDiscussionController extends AbstractShowController
$query->orderBy('created_at')->skip($offset)->take($limit)->with($include);
$posts = $query->get()->all();
$posts = $query->get();
foreach ($posts as $post) {
$post->discussion = $discussion;
}
return $posts;
$this->loadRelations($posts, $include);
return $posts->all();
}
protected function getRelationsToLoad(): array
{
$addedRelations = parent::getRelationsToLoad();
return $this->getPostRelationships($addedRelations);
}
}