]> BookStack Code Mirror - bookstack/blob - app/Entities/Queries/TopFavourites.php
DB: Started update of entity loading to avoid global selects
[bookstack] / app / Entities / Queries / TopFavourites.php
1 <?php
2
3 namespace BookStack\Entities\Queries;
4
5 use BookStack\Activity\Models\Favourite;
6 use Illuminate\Database\Query\JoinClause;
7
8 class TopFavourites extends EntityQuery
9 {
10     public function run(int $count, int $skip = 0)
11     {
12         $user = user();
13         if ($user->isGuest()) {
14             return collect();
15         }
16
17         $query = $this->permissionService()
18             ->restrictEntityRelationQuery(Favourite::query(), 'favourites', 'favouritable_id', 'favouritable_type')
19             ->select('favourites.*')
20             ->leftJoin('views', function (JoinClause $join) {
21                 $join->on('favourites.favouritable_id', '=', 'views.viewable_id');
22                 $join->on('favourites.favouritable_type', '=', 'views.viewable_type');
23                 $join->where('views.user_id', '=', user()->id);
24             })
25             ->orderBy('views.views', 'desc')
26             ->where('favourites.user_id', '=', user()->id);
27
28         $favourites = $query
29             ->skip($skip)
30             ->take($count)
31             ->get();
32
33         $this->mixedEntityListLoader()->loadIntoRelations($favourites->all(), 'favouritable', false);
34
35         return $favourites->pluck('favouritable')->filter();
36     }
37 }