Rumah  >  Soal Jawab  >  teks badan

Laksanakan penapis dan penomboran menggunakan Laravel Eloquent

Saya cuba mencipta API yang akan mengembalikan semua rekod pelanggan daripada pangkalan data. Tetapi ini menyediakan keupayaan paging dan penapisan. ,

Fungsi penapis ialah parameter pertanyaan pilihan. Jadi ia tidak perlu dimasukkan dalam parameter pertanyaan.

Tetapi saya menghadapi masalah melakukan ini.

Ini ialah kaedah pengindeksan dalam fail 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));
    }

Atau adakah cara yang lebih baik untuk menggabungkan fungsi penapisan pilihan dengan penomboran?

Terima kasih.

P粉010967136P粉010967136316 hari yang lalu771

membalas semua(1)saya akan balas

  • P粉268284930

    P粉2682849302023-11-13 10:57:10

    Masalah utama anda ialah baris ini:

    $customers = Customer::all();

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

    Untuk memilih pautan, gunakan klausa ->query() 方法或 ->when():

    Gunakan ::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));
    

    Gunakan klausa ->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));

    balas
    0
  • Batalbalas