使用 Laravel Eloquent 實作篩選器和分頁
P粉010967136
P粉010967136 2023-11-12 18:42:35

我正在嘗試建立一個 API,該 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));
    }

或有更好的方法將可選過濾功能與分頁結合嗎?

謝謝。

P粉010967136
P粉010967136

全部回覆(1)
P粉268284930

您的主要問題是這一行:

$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));
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!