1 <?php namespace BookStack\Entities\Queries;
4 use BookStack\Actions\View;
5 use Illuminate\Database\Query\JoinClause;
6 use Illuminate\Support\Facades\DB;
8 class TopFavourites extends EntityQuery
10 public function run(int $count, int $page)
13 if ($user === null || $user->isDefault()) {
17 $query = $this->permissionService()
18 ->filterRestrictedEntityRelations(View::query(), 'views', 'viewable_id', 'viewable_type', 'view')
19 ->select('*', 'viewable_id', 'viewable_type', DB::raw('SUM(views) as view_count'))
20 ->groupBy('viewable_id', 'viewable_type')
21 ->rightJoin('favourites', function (JoinClause $join) {
22 $join->on('views.viewable_id', '=', 'favourites.favouritable_id');
23 $join->on('views.viewable_type', '=', 'favourites.favouritable_type');
24 $join->where('favourites.user_id', '=', user()->id);
26 ->orderBy('view_count', 'desc');
28 return $query->with('viewable')
29 ->skip($count * ($page - 1))