Привет.
В настоящее время я работаю над созданием сайта, на котором сообщения форума выводятся на отдельную страницу, где я использую их в качестве записей блога. Чтобы заставить его работать так, как я хочу, я сначала -> get () самое новое сообщение для верхней, основной записи блога, а затем я представляю остальные под ним в стиле каменной кладки, например: www.hockeyforat.se/laravel
Это означает, что у меня есть это настроено:
$post = Post::whereNewTopic(true)
->whereHas('Topic', function($q){$q->whereForumId(13);})
->orderBy('pid', 'DESC')
->first();
$vars['p'] = $post;
И это, очевидно, предназначено для перетаскивания самого нового поста и размещения его сверху, так что это прекрасно работает, но затем приходит другая часть, где я должен пропустить первый пост (так как он уже находится на странице, указанной выше). Я использовал это, чтобы сделать это:
$posts = Post::whereNewTopic(true)
->whereHas('Topic', function($q){$q->whereForumId(13);})
->orderBy('pid', 'DESC')
->skip(1)
->take(100000)
->get();
$vars['posts'] = $posts;
И это сработало в высшей степени тоже. Но когда я хотел разбить его на страницы, у меня возникли некоторые проблемы. -> Постраничный (6) игнорирует —> Пропустить (1). Кто-нибудь знает, как это обойти? Пример снова здесь: www.hockeyforat.se/laravel, и я также добавлю картинку ниже. Как вы можете видеть, не пропуская первое, я получу одно и то же сообщение подряд, поскольку первое будет вытянуто с $ post здесь выше.
$posts = Post::whereNewTopic(true)
->whereHas('Topic', function($q){$q->whereForumId(13);})
->orderBy('pid', 'DESC')
**->skip(1)**
->take(100000)
**->paginate(6);**
$vars['posts'] = $posts;
2 способа:
первый: только использовать ->paginate(6)
без пропустить и взять и сделать
нумерация страниц с echo $users->render();
второе: не использовать ->paginate(6)
использовать ->take($take)
а также
->skip($page * $take)
имелось ввиду в вашем случае: ->take(6)
а также
->skip($page * 6)
, $page
должен быть частью вашего запроса и
начать с 0 (ноль).
Не удалось заставить часть с пропуском работать с paginate, как предполагалось, но это было решено, сказав: «Не разбивайте на страницы какой-либо post-идентификатор (pid), который находится в $ post.
$post = Post::whereNewTopic(true)
->whereHas('Topic', function($q){$q->whereForumId(13);})
->orderBy('pid', 'DESC')
->first();
$vars['p'] = $post;$posts = Post::whereNewTopic(true)
->whereHas('Topic', function($q){$q->whereForumId(13);})
->where('pid', '<>', $post->pid)
->orderBy('pid', 'DESC')
->paginate(6);
$vars['posts'] = $posts;