Flarum\Core\Repository\PostRepository::getIndexForNumber PHP Метод

getIndexForNumber() публичный Метод

Get the position within a discussion where a post with a certain number is. If the post with that number does not exist, the index of the closest post to it will be returned.
public getIndexForNumber ( integer $discussionId, integer $number, User $actor = null ) : integer
$discussionId integer
$number integer
$actor Flarum\Core\User
Результат integer
    public function getIndexForNumber($discussionId, $number, User $actor = null)
    {
        $query = Discussion::find($discussionId)->postsVisibleTo($actor)->where('time', '<', function ($query) use($discussionId, $number) {
            $query->select('time')->from('posts')->where('discussion_id', $discussionId)->whereNotNull('number')->take(1)->orderByRaw('ABS(CAST(number AS SIGNED) - ' . (int) $number . ')');
        });
        return $query->count();
    }

Usage Example

Пример #1
0
 /**
  * {@inheritdoc}
  */
 protected function extractOffset(ServerRequestInterface $request)
 {
     $actor = $request->getAttribute('actor');
     $queryParams = $request->getQueryParams();
     $sort = $this->extractSort($request);
     $limit = $this->extractLimit($request);
     $filter = $this->extractFilter($request);
     if (($near = array_get($queryParams, 'page.near')) > 1) {
         if (count($filter) > 1 || !isset($filter['discussion']) || $sort) {
             throw new InvalidParameterException('You can only use page[near] with filter[discussion] and the default sort order');
         }
         $offset = $this->posts->getIndexForNumber($filter['discussion'], $near, $actor);
         return max(0, $offset - $limit / 2);
     }
     return parent::extractOffset($request);
 }
All Usage Examples Of Flarum\Core\Repository\PostRepository::getIndexForNumber