gpt4 book ai didi

php - 如何使用 Laravel Eloquent 添加过滤器和分页

转载 作者:行者123 更新时间:2023-12-05 04:26:48 25 4
gpt4 key购买 nike

我正在尝试创建一个 API,它将返回数据库中的所有客户记录。但这提供了分页和过滤。,

过滤功能是一个可选的查询参数。所以没有必要将它包含在查询参数中。

但我在这样做时遇到了问题。

这是我在 CustomerController 文件中的索引方法:

    public function index(Request $request)
{
// Get how many item per page
$itemPerPage = $request->query('per_page');

// SQL Query
$customers = Customer::all();

// Filter data
if (!empty($request->name)) {
$customers = $customers->where('name', '=', $request->name);
}

// Return the result as JSON
return new CustomerCollection($customers->paginate($itemPerPage));
}

Screenshot of Postman

或者有更好的方法将可选的过滤功能与分页相结合?

谢谢。

最佳答案

您的主要问题是这一行:

$customers = Customer::all();

all() 方法立即返回所有 customers 记录作为一个 Collection,它没有 ->paginate( ) 方法:https://laravel.com/docs/9.x/collections#available-methods .

要有选择地链接,请使用 ->query() 方法或 ->when() 子句:

使用 ::query() 而不是 ::all():

$itemPerPage = $request->query('per_page');

// SQL Query
$customers = Customer::query();

// Filter data
if (!empty($request->name)) {
$customers = $customers->where('name', '=', $request->name);
}

// Return the result as JSON
return new CustomerCollection($customers->paginate($itemPerPage));

使用 ->when() 子句:

$itemPerPage = $request->query('per_page');

$customers = Customer::when(!empty($request->name), function ($query) use ($request) {
$query->where('name', '=', $request->name);
});

return new CustomerCollection($customers->paginate($itemPerPage));

关于php - 如何使用 Laravel Eloquent 添加过滤器和分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72940205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com