yogameleniawan / search-sort-eloquent
Searching & Sorting Column Eloquent Model
README
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: 🇮🇩 Bahasa Indonesia | 🇬🇧 English
🇮🇩 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
-
Install Paket via Composer
composer require yogameleniawan/search-sort-eloquent
-
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
-
Install Package via Composer
composer require yogameleniawan/search-sort-eloquent
-
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.