Laravel 分页器无法正常工作

Laravel paginator doesn't work properly

laravel 分页器确实有效,但对我来说不是很好。

所以我有一个带有评论的论坛,当该页面上有 超过 10 条评论时,分页器必须显示。

所以我有一个主题有超过10条评论然后在那个页面上工作正常,但是当我转到另一个页面时,他确实采取了最多[=41=的分页] 注释。那不是我想要的。

Here are some screens and code:

这里有10多条评论,显示分页就好了。奇怪的是它只显示 2 条评论而不是 10.

这是另一个只有 8 条评论的主题,因此分页不应显示任何内容:

但是如您所见,它确实显示了分页器....

我的代码如下所示:

Controller:

public function thread($title)
    {
        $thread = Thread::where('title', '=', str_replace('Thread-', '',str_replace('-', ' ', $title)))->first();

        $usercolor = DB::table('threads')
                                ->join('user', 'threads.uid', '=', 'user.id')
                                ->join('role', 'user.role_id', '=', 'role.id')
                                ->where('threads.uid', '=', $thread->uid)
                                ->first();

        $usertitle = DB::table('threads')
                                ->join('user', 'threads.uid', '=', 'user.id')
                                ->where('threads.uid', '=', $thread->uid)
                                ->first();

        $comments = Comment::orderBy('posted_at', 'asc')
                                ->where('deleted_at', '=', '0000-00-00 00:00:00')
                                ->with('user.role')
                                ->paginate(10);

        if (!$thread) {
            return die('bestaat niet!');
        }else{

        return View::make('thread')->with('threads', $thread)
                                   ->with('comments', $comments)
                                   ->with('usercolor', $usercolor)
                                   ->with('usertitle', $usertitle);

        }

    }

View:

@include('globs.header')

<div class="col-sm-offset-1 col-sm-10">
<div class="clearfix">&nbsp;</div>


@if(Request::get('page', 1) == 1)
<div class="panel panel-default" id="a9">
  <div class="panel-heading">     
    <div class="panel-title">{{ $threads->title }}  

    </div>
  </div>

  <div class="panel-body thread-row"> 

    <div class="row thread-row">

      <div class="col-md-2 col-sm-3 text-center userblock">
        <div class="clerafix">&nbsp;</div>
        <img class="img-thumbnail avatar" src="./public/img/avatar.jpg" alt="Avatar" height="55px;" width="55px">   
        <div class="push_bottom_5" style="color:{{ $usercolor->colour }};"><strong>{{ $threads->username }}</strong></div>
        <div class="push_bottom_5"><small>{{ $usertitle->usertitle }}</small></div>
        <div class="label label-default" style="background-color:{{ $usercolor->colour }};">{{ $usercolor->name }}</div>

        <div class="push_bottom_5">
          @if($usercolor->id == '1')
          <i class="fa fa-star"></i>
          @elseif($usercolor->id == '2')
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          @elseif($usercolor->id == '3')
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          @elseif($usercolor->id == '4')
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          @elseif($usercolor->id == '5')
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          @elseif($usercolor->id >= '6')
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          @endif
        </div> 

        <div class="text-muted text-left"><small>Total Posts:&nbsp; 66</small></div>    
        <div class="text-muted text-left"><small>Joined&nbsp; 05-11-2014</small></div>



        <div class="clerafix">&nbsp;</div>
      </div>


      <div class="col-md-5 col-sm-6 col-xs-8">
        <div class="clerafix">&nbsp;</div>
        <div class="text-muted"><span><i class="fa fa-calendar"></i> </span><small>
        <span>Posted:</span> {{ date("d-m-Y", strtotime($threads->date_posted)) }}</small></div>   
      </div>    

      <div class="col-md-10 col-sm-9 col-xs-12">
        <div class="clerafix">&nbsp;</div>

        <div class="content_body"><p>{{ Helper::Filter(BBCode::parse($threads->message)) }}</p>

</div>
        <div class="clerafix">&nbsp;</div>
      </div>

    </div>

  </div>

  <div class="panel-footer clearfix">   
    <div class="pull-right">  
      <!-- acties -->
        <button class="btn btn-primary btn-sm"><i class="fa fa-edit"></i> Aanpassen</button>
      <button class="btn btn-primary btn-sm"><i class="fa fa-quote-left"></i> Quote</button>
      <button class="btn btn-danger btn-sm"><i class="fa fa-trash"></i> Verwijder</button>
      <button class="btn btn-warning btn-sm"><i class="fa fa-exclamation"></i> Rapporteer</button>
    </div>
  </div>
</div>

<!-- end of the topic -->
</div>
@endif


<!-- begin of comments -->
@foreach($comments as $comment)
@if($comment->tid == $threads->tid)

<div class="col-sm-offset-1 col-sm-10">
<div class="clearfix">&nbsp;</div>


<div class="panel panel-default" id="a9">

  <div class="panel-body thread-row"> 

    <div class="row thread-row">

      <div class="col-md-2 col-sm-3 text-center userblock">
        <div class="clerafix">&nbsp;</div>
        <img class="img-thumbnail avatar" src="./public/img/avatar.jpg" alt="Avatar" height="55px;" width="55px">   
        <div class="push_bottom_5" style="color:{{ $comment->user->role->colour }};"><strong>{{ $comment->username }}</strong></div>
        <div class="push_bottom_5"><small>{{ $comment->user->usertitle }}</small></div>
        <div class="label label-default" style="background-color:{{ $comment->user->role->colour }};">{{ $comment->user->role->name }}</div>

        <div class="push_bottom_5">
          @if($comment->user->role->id == '1')
          <i class="fa fa-star"></i>
          @elseif($comment->user->role->id == '2')
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          @elseif($comment->user->role->id == '3')
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          @elseif($comment->user->role->id == '4')
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          @elseif($comment->user->role->id == '5')
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          @elseif($comment->user->role->id >= '6')
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          @endif
        </div>

        <div class="text-muted text-left"><small>Total Posts:&nbsp; 66</small></div>    
        <div class="text-muted text-left"><small>Joined&nbsp; 05-11-2014</small></div>



        <div class="clerafix">&nbsp;</div>
      </div>


      <div class="col-md-5 col-sm-6 col-xs-8">
        <div class="clerafix">&nbsp;</div>
        <div class="text-muted"><span class="hidden-md "><i class="fa fa-calendar"></i>
        </span><small><span>Posted:</span> {{ date("d-m-Y", strtotime($comment->posted_at)) }}</small></div>   
      </div>    

      <div class="col-md-10 col-sm-9 col-xs-12">
        <div class="clerafix">&nbsp;</div>

        <div class="content_body"><p>{{ Helper::Filter(BBCode::parse($comment->comment)) }}</p>

</div>
        <div class="clerafix">&nbsp;</div>
      </div>
    </div>

  </div>

  <div class="panel-footer clearfix">   
    <div class="pull-right">
    <!-- acties -->
      <button class="btn btn-primary btn-sm"><i class="fa fa-edit"></i> Aanpassen</button>
      <button class="btn btn-primary btn-sm"><i class="fa fa-quote-left"></i> Quote</button>
      <button class="btn btn-danger btn-sm"><i class="fa fa-trash"></i> Verwijder</button>
      <button class="btn btn-warning btn-sm"><i class="fa fa-exclamation"></i> Rapporteer</button>
    </div>
  </div>
</div>

</div>
@endif
@endforeach

<!-- end of comments -->


@if(Auth::check())
<div class="col-sm-offset-1 col-sm-10">
<div class="clearfix">&nbsp;</div>
  <div class="panel panel-default" id="a9">
          <div class="panel-heading"><h4>Snelle reactie plaatsen</h4></div>
            <div class="panel-body">

          {{ Form::open(array('url' => 'SubmitComment')) }}
            <input type="hidden" value="{{ $threads->tid }}" name="tid">
            {{ Honeypot::generate('spamprt', 'time') }}
                <textarea name="comment" class="form-control" col="250" rows="5" placeholder="Typ uw bericht..."></textarea>

                <div class="clearfix">&nbsp;</div>
            <button class="btn btn-success pull-left" type="submit" name="action">
            Reageer
            </button>
          {{ Form::close() }}

          </div>
    </div>
</div>
@endif


<div class="col-md-4 col-md-offset-5">{{ $comments->links() }}</div>



</div>
</div>

@include('globs.footer')

希望你们能理解我的问题,并能与我一起找到完美的解决方案。

您似乎总是检索 所有 条评论。我还可以在您的模板中看到这一点,您将代码包装在 foreach 中的 @if($comment->tid == $threads->tid) 中。

这意味着稍后在您的模板中检索分页链接时,它将检索 所有 评论的链接,但并非所有评论都显示在页面中,因为你在循环中手动过滤它们。

查询评论如

$comments = Comment::orderBy('posted_at', 'asc')
    ->where('deleted_at', '=', '0000-00-00 00:00:00')
    ->where('tid', $threads->tid) // it's about this line!
    ->with('user.role')
    ->paginate(10);

注: 上面应该为您的问题提供解决方案,但作为额外的,您还可以查看 relationships. As an addition, this answer on SO "Laravel 4.1: How to paginate eloquent eager relationship?"(因为您用 Laravel-4 标记了 post)有一些很好的论据有效地解决这个问题。