Как использовать Laravel Paginate и пропустить (1)

Привет.

В настоящее время я работаю над созданием сайта, на котором сообщения форума выводятся на отдельную страницу, где я использую их в качестве записей блога. Чтобы заставить его работать так, как я хочу, я сначала -> 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;

http://i.stack.imgur.com/UIfi9.jpg

0

Решение

2 способа:

  • первый: только использовать ->paginate(6) без пропустить и взять и сделать
    нумерация страниц с echo $users->render();

  • второе: не использовать ->paginate(6)использовать ->take($take) а также
    ->skip($page * $take) имелось ввиду в вашем случае: ->take(6) а также
    ->skip($page * 6), $page должен быть частью вашего запроса и
    начать с 0 (ноль).

1

Другие решения

Не удалось заставить часть с пропуском работать с 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;
0

По вопросам рекламы [email protected]