【问题标题】:How To Get Laravel 5.8 Pagination To Work With Angular 8如何让 Laravel 5.8 分页与 Angular 8 一起工作
【发布时间】:2019-11-23 19:13:02
【问题描述】:

使用 laravel 分页从数据库中获取下一组结果时遇到问题。 从这条路线我的结果看起来像这样:api/getMerchants

{
    "merchants": {
        "current_page": 1,
        "data": [], // contains some data
        "first_page_url": "/?page=1",
        "from": null,
        "next_page_url": "/?page=2",
        "path": "/",
        "per_page": 15,
        "prev_page_url": null,
        "to": null
    }
}

现在,当我尝试通过调用 api/getMerchants 路由并将下一页 url 值附加到它来获取下一组结果时,我得到了相同的结果集,但这次只有 current_page 值更改为 2并且 next_page_url 变为 3。最终的 url 如下所示:

api/getMerchants/?page=2

我做错了什么?我如何获得下一组结果,当我尝试使用邮递员时,我也会得到同样的结果。

这是我的控制器:

public function getMerchants(Request $request){

        //get all registered companies 
        $getmerchants = DB::table('merchants')
        ->join('joint_companies', 'joint_companies.id', '=', 'super_id')
        ->join('company_admin', 'company_admin.id', '=', 'admin_id')
        ->select('merchants.*','company_admin.name AS admin_name','joint_companies.name AS exec_name')
        ->get();

        //clean data
        $merchantsdata = [];

        $merchants = $getmerchants->map(function($items){
            $merchantsdata['id'] = $items->id;
            $merchantsdata['merchant_name'] = Crypt::decryptString($items->merchant_name);
            $merchantsdata['status'] = $items->status;
            $merchantsdata['country'] = $items->country;
            $merchantsdata['logo'] = $items->logo;

            return $merchantsdata;
         });

         $objects = new Paginator($merchants, 15);
         $response = [
            'merchants' => $objects
        ];
        return response()->json($response, 200);

    }

【问题讨论】:

  • 您的laravel 实现似乎有错误,您应该发布您的eloquant 和controller 以获得帮助。
  • @Yanis-git 我刚刚编辑了问题以显示我的控制器
  • 希望你能找到这个:youtu.be/VnEgCk-MlN4

标签: angular laravel eloquent pagination


【解决方案1】:

通过调用DB::table('merchants') ... ->get(),您并未使用Paginator 组件。

正如您在documentation 上看到的,您应该致电->paginate():

    //get all registered companies 
    $marchands = DB::table('merchants')
    ->join('joint_companies', 'joint_companies.id', '=', 'super_id')
    ->join('company_admin', 'company_admin.id', '=', 'admin_id')
    ->select('merchants.*','company_admin.name AS admin_name','joint_companies.name AS exec_name')
    ->paginate();

注意$marchands 现在是Paginator 对象

您可能仍想通过以下方式转换您的数据收集:

$marchands->getCollection()->transform(function ($marchand) {
     $marchand->merchant_name = Crypt::decryptString($marchand->merchant_name);
     return $marchand;
});

Paginator 类实现Illuminate\Contracts\Support\Jsonable 你可以将对象给你的响应或调用$marchands->toJson()

【讨论】:

  • 如何返回转换后的数据
  • 我已经更新了我的答案。实际上transform 改变原始对象而不是返回一个新数组。
【解决方案2】:

我也遇到了同样的错误。要解决这个问题,您需要通知您的数据库表中有多少项目?如果 item 为 2 并且您的 per_page 值为 5 那么您只能获得一页数据。现在,如果您使用 page = 2(对于第二页)点击请求,那么您如何获取第二页数据。自然它会显示你的空数据。并且您的查询已显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多