doutun1875 2017-06-22 20:52
浏览 96
已采纳

Laravel:分页只返回第一块

I pull in the paginated data via AJAX requests in my Laravel application. This works fine for the first chunk. For the following however, it's only passing one column (the id).

What is the problem?

The relevant code:

Route::get('contacts', function (Request $request) {
    return buildQuery($request, User::class)->simplePaginate(50);
});

function buildQuery(Request $request, $model) {
    $query = DB::table('users')->select('id as ID');
    $properties = $request->all();

    $searchString = "";
    if (in_array('q', array_keys($properties)) && $properties['q']) {
        $searchString = $properties['q'];
        $query->orWhere('id', 'like', '%'.$searchString.'%');
    }

    foreach ($properties as $property => $value) {
        if ($property == "id" || $property == "q")
            continue;

        if (in_array($property, array_keys($model::$labels))) {
            $query->addSelect($property.' as '.$model::$labels[$property]);

            if ($value == "desc" || $value == "asc")
                $query->orderBy($property, $value);

            if ($searchString)
                $query->orWhere($property, 'like', '%'.$searchString.'%');
        }
    }

    return $query;
}
  • 写回答

1条回答 默认 最新

  • donglu5728 2017-06-22 21:09
    关注

    Its because the query params are not appended to the subsequent pagination requests.

    Update your logic inside the Route to:

    Route::get('contacts', function (Request $request) {
        return buildQuery($request, User::class)->paginate(50)->appends($request->all());
    });
    

    OR

    Route::get('contacts', function (Request $request) {
            return buildQuery($request, User::class)->simplePaginate(50)->appends($request->all());
        });
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?