错误渲染与Paginator处理2查询


Wrong render in view with Paginator handing 2 queries

我正在尝试合并2个查询,并在对新变量进行分页后:

$a = Message::where('conversation_id',$id)->where('user_id',$user->id)->where('s_1',1)
        ->orderBy('created_at','DESC')->get();
    $b = Message::where('conversation_id',$id)->where('user_id',$conversation->recipients()->last()->user->id)->where('s_2',1)
        ->orderBy('created_at','DESC')->get();
    $result = $a->merge($b);
    $messages = new Paginator($result, $result->count(), 1, 1);

在视图上工作foreach,但是渲染错误且不分页,只在一个页面中显示所有结果:

<table class="table table-hover">
            @foreach($messages as $i => $message)
            <tr>
                <td>
                    <img src="{{$avatar[$message->user->username]}}" class="aoi pull-left"  />
                    <a href="{{route('profile',[$message->user->username])}}">{{ $message->user->name }}</a> 
                    {{ $message->body }}
                </td>
            </tr>
            @endforeach
        </table>
        {!! str_replace('/?', '?', $messages->render()) !!}

消息变量返回正确的参数,但不工作在视图:

{"total":2,"per_page":2,"current_page":1,"last_page":1,"next_page_url":null,"prev_page_url":null,"from":1,"to":2,"data":

在url:/message/1?

在/message/1中显示两行,并且不分页。

我只能假设你这里的Paginator实际上是LengthAwarePaginator,因为你正在传递项目的总数(或者这可能是旧版本的Laravel)。

构造Paginator类的方法:

$messages = new LengthAwarePaginator($result, $result->count(), 1, 1);

如果你看Paginator类定义:

/**
 * Create a new paginator instance.
 *
 * @param  mixed  $items
 * @param  int  $total
 * @param  int  $perPage
 * @param  int|null  $currentPage
 * @param  array  $options (path, query, fragment, pageName)
 * @return void
 */
public function __construct($items, $total, $perPage, $currentPage = null, array $options = [])

第四个参数是当前页,您将其作为1传入,使其始终分页到第一页。您可以简单地传入null(或者不避免传入第四个参数),它将尝试通过检查当前请求参数page来自动解析当前页面。

总之,改成这样:

$messages = new LengthAwarePaginator($result, $result->count(), 1);