a70ed81908
Removes page/chpater addSelect global query, to load book slug, and instead extracts base queries to be managed in new static class, while updating specific entitiy relation loading to use our more efficient MixedEntityListLoader where appropriate. Related to #4823
37 lines
1.2 KiB
PHP
37 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace BookStack\Entities\Queries;
|
|
|
|
use BookStack\Activity\Models\Favourite;
|
|
use Illuminate\Database\Query\JoinClause;
|
|
|
|
class TopFavourites extends EntityQuery
|
|
{
|
|
public function run(int $count, int $skip = 0)
|
|
{
|
|
$user = user();
|
|
if ($user->isGuest()) {
|
|
return collect();
|
|
}
|
|
|
|
$query = $this->permissionService()
|
|
->restrictEntityRelationQuery(Favourite::query(), 'favourites', 'favouritable_id', 'favouritable_type')
|
|
->select('favourites.*')
|
|
->leftJoin('views', function (JoinClause $join) {
|
|
$join->on('favourites.favouritable_id', '=', 'views.viewable_id');
|
|
$join->on('favourites.favouritable_type', '=', 'views.viewable_type');
|
|
$join->where('views.user_id', '=', user()->id);
|
|
})
|
|
->orderBy('views.views', 'desc')
|
|
->where('favourites.user_id', '=', user()->id);
|
|
|
|
$favourites = $query
|
|
->skip($skip)
|
|
->take($count)
|
|
->get();
|
|
|
|
$this->mixedEntityListLoader()->loadIntoRelations($favourites->all(), 'favouritable', false);
|
|
|
|
return $favourites->pluck('favouritable')->filter();
|
|
}
|
|
}
|