yogameleniawan/search-sort-eloquent

Searching & Sorting Column Eloquent Model

v1.2.1 2024-05-28 01:37 UTC

This package is auto-updated.

Last update: 2025-08-02 09:11:22 UTC


README

Latest Version on Packagist Total Downloads License

A simple Laravel package to add dynamic search and sorting functionality to your Eloquent Models with just a few lines of code.

🧭 Quick Navigation

🇮🇩 Bahasa Indonesia

✨ Fitur Utama

  • Pencarian Mudah: Tambahkan pencarian full-text di beberapa kolom dengan satu metode.
  • Pengurutan Dinamis: Urutkan hasil berdasarkan parameter query dari URL.
  • Integrasi Cepat: Cukup gunakan Trait pada Model Anda.
  • Dapat Digabungkan: Kombinasikan pencarian dan pengurutan dengan mulus.

📋 Persyaratan

  • PHP: 7.4 atau lebih tinggi
  • Laravel: 8.x atau lebih tinggi

⚙️ Instalasi

  1. Install Paket via Composer

    composer require yogameleniawan/search-sort-eloquent
  2. Daftarkan Service Provider

    • Untuk Laravel 11+: Tambahkan provider ke file bootstrap/providers.php:

      <?php
      
      return [
          App\Providers\AppServiceProvider::class,
          // ...
          Yogameleniawan\SearchSortEloquent\SearchSortServiceProvider::class, // Tambahkan baris ini
      ];
    • Untuk Laravel 8 - 10: Tambahkan provider ke file config/app.php:

      'providers' => [
          // ...
          Yogameleniawan\SearchSortEloquent\SearchSortServiceProvider::class, // Tambahkan baris ini
      ],

🚀 Cara Penggunaan

1. Trait Searchable

Gunakan trait Searchable pada Model Anda, lalu panggil metode search().

  • Tambahkan Trait ke Model

    // app/Models/User.php
    use Yogameleniawan\SearchSortEloquent\Traits\Searchable;
    
    class User extends Model {
        use Searchable;
        // ...
    }
  • Gunakan di Controller

    // app/Http/Controllers/UserController.php
    public function index(Request $request) {
        $users = User::search(
            keyword: $request->keyword,
            columns: ["name", "email"]
        )->get();
    
        return response()->json($users);
    }
  • Contoh Query URL

    [https://domain-anda.com/api/users?keyword=Yoga](https://domain-anda.com/api/users?keyword=Yoga)
    

2. Trait Sortable

Gunakan trait Sortable pada Model Anda, lalu panggil metode sort().

  • Tambahkan Trait ke Model

    // app/Models/User.php
    use Yogameleniawan\SearchSortEloquent\Traits\Sortable;
    
    class User extends Model {
        use Sortable;
        // ...
    }
  • Gunakan di Controller

    // app/Http/Controllers/UserController.php
    public function index(Request $request) {
        $users = User::sort(
            sort_by: $request->sort_by,      // Kolom untuk diurutkan
            sort_order: $request->sort_order  // 'ASC' atau 'DESC'
        )->get();
    
        return response()->json($users);
    }
  • Contoh Query URL

    [https://domain-anda.com/api/users?sort_by=name&sort_order=desc](https://domain-anda.com/api/users?sort_by=name&sort_order=desc)
    

3. Menggabungkan Searchable & Sortable

Anda bisa dengan mudah menggabungkan kedua metode untuk fungsionalitas penuh.

  • Tambahkan Kedua Trait ke Model

    // app/Models/User.php
    use Yogameleniawan\SearchSortEloquent\Traits\Searchable;
    use Yogameleniawan\SearchSortEloquent\Traits\Sortable;
    
    class User extends Model {
        use Searchable, Sortable;
        // ...
    }
  • Gunakan di Controller

    // app/Http/Controllers/UserController.php
    public function index(Request $request) {
        $users = User::search(
                        keyword: $request->keyword,
                        columns: ["name", "email"]
                    )
                    ->sort(
                        sort_by: $request->sort_by,
                        sort_order: $request->sort_order
                    )
                    ->paginate(10); // Anda juga bisa menggunakan paginasi
    
        return response()->json($users);
    }
  • Contoh Query URL

    [https://domain-anda.com/api/users?keyword=Yoga&sort_by=name&sort_order=asc](https://domain-anda.com/api/users?keyword=Yoga&sort_by=name&sort_order=asc)
    

🇬🇧 English Version

✨ Key Features

  • Effortless Searching: Add full-text search across multiple columns with a single method.
  • Dynamic Sorting: Sort results based on URL query parameters.
  • Quick Integration: Simply use a Trait on your Model.
  • Chainable: Seamlessly combine search and sort functionalities.

📋 Requirements

  • PHP: 7.4 or higher
  • Laravel: 8.x or higher

⚙️ Installation

  1. Install Package via Composer

    composer require yogameleniawan/search-sort-eloquent
  2. Register the Service Provider

    • For Laravel 11+: Add the provider to your bootstrap/providers.php file:

      <?php
      
      return [
          App\Providers\AppServiceProvider::class,
          // ...
          Yogameleniawan\SearchSortEloquent\SearchSortServiceProvider::class, // Add this line
      ];
    • For Laravel 8 - 10: Add the provider to your config/app.php file:

      'providers' => [
          // ...
          Yogameleniawan\SearchSortEloquent\SearchSortServiceProvider::class, // Add this line
      ],

🚀 How to Use

1. Searchable Trait

Use the Searchable trait in your Model, then call the search() method.

  • Add Trait to Model

    // app/Models/User.php
    use Yogameleniawan\SearchSortEloquent\Traits\Searchable;
    
    class User extends Model {
        use Searchable;
        // ...
    }
  • Use in Controller

    // app/Http/Controllers/UserController.php
    public function index(Request $request) {
        $users = User::search(
            keyword: $request->keyword,
            columns: ["name", "email"]
        )->get();
    
        return response()->json($users);
    }
  • Example URL Query

    [https://your-domain.com/api/users?keyword=Yoga](https://your-domain.com/api/users?keyword=Yoga)
    

2. Sortable Trait

Use the Sortable trait in your Model, then call the sort() method.

  • Add Trait to Model

    // app/Models/User.php
    use Yogameleniawan\SearchSortEloquent\Traits\Sortable;
    
    class User extends Model {
        use Sortable;
        // ...
    }
  • Use in Controller

    // app/Http/Controllers/UserController.php
    public function index(Request $request) {
        $users = User::sort(
            sort_by: $request->sort_by,      // Column to sort by
            sort_order: $request->sort_order  // 'ASC' or 'DESC'
        )->get();
    
        return response()->json($users);
    }
  • Example URL Query

    [https://your-domain.com/api/users?sort_by=name&sort_order=desc](https://your-domain.com/api/users?sort_by=name&sort_order=desc)
    

3. Combining Searchable & Sortable

You can easily chain both methods for full functionality.

  • Add Both Traits to Model

    // app/Models/User.php
    use Yogameleniawan\SearchSortEloquent\Traits\Searchable;
    use Yogameleniawan\SearchSortEloquent\Traits\Sortable;
    
    class User extends Model {
        use Searchable, Sortable;
        // ...
    }
  • Use in Controller

    // app/Http/Controllers/UserController.php
    public function index(Request $request) {
        $users = User::search(
                        keyword: $request->keyword,
                        columns: ["name", "email"]
                    )
                    ->sort(
                        sort_by: $request->sort_by,
                        sort_order: $request->sort_order
                    )
                    ->paginate(10); // You can also use pagination
    
        return response()->json($users);
    }
  • Example URL Query

    [https://your-domain.com/api/users?keyword=Yoga&sort_by=name&sort_order=asc](https://your-domain.com/api/users?keyword=Yoga&sort_by=name&sort_order=asc)
    

Changelog

Please see CHANGELOG for more information on what has changed recently.

🤝 Contributing

Contributions are welcome! Please feel free to submit a pull request.

📜 License

The MIT License (MIT). Please see the License File for more information.

🙏 Credits