Implementieren Sie Filter und Paginierung mit Laravel Eloquent
P粉010967136
P粉010967136 2023-11-12 18:42:35
0
1
616

Ich versuche, eine API zu erstellen, die alle Kundendatensätze aus einer Datenbank zurückgibt. Dies bietet jedoch Paging- und Filterfunktionen. ,

Die Filterfunktion ist ein optionaler Abfrageparameter. Es muss also nicht in den Abfrageparametern enthalten sein.

Aber ich habe ein Problem damit.

Dies ist die Indizierungsmethode in derCustomerController-Datei:

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)); }

Oder gibt es eine bessere Möglichkeit, optionale Filterfunktionen mit Paginierung zu kombinieren?

Vielen Dank.

P粉010967136
P粉010967136

Antworte allen (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));
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!