Giới thiệu về Laravel Purity
Laravel purity là một thư viện hỗ trợ filter và sort data một cách dễ dàng đơn giản hỗ trợ trực tiếp cho laravel framework. Để biết được sự lợi hại của thư viện này. Hãy cùng mình mò mẫm nó nhé. Let’s gooooooo !!!
Đặt vấn đề
Khi chúng ta viết api để filter nhiều giá trị cùng một lúc thì service của chúng ta sẽ khá dài dòng và rườm rà. Để viết ra một hàm filter dùng chung thì sẽ tốn khá nhiều thời gian và chất xám. Vì vậy thư viện này sinh ra với mục đích tối giản hơn về cách filter và sort dữ liệu.
Lợi ích khi sử dụng
Khi chúng ta viết một cách bình thường:
public function index(Request $request)
{
$query = Post::query();
// Lọc theo tiêu đề
if ($request->has('title')) {
$query->where('title', 'like', '%' . $request->input('title') . '%');
}
// Lọc theo nội dung (content)
if ($request->has('content')) {
$query->where('content', 'like', '%' . $request->input('content') . '%');
}
// Lọc theo ngày xuất bản (published_at)
if ($request->has('published_at')) {
$query->whereDate('published_at', '=', $request->input('published_at'));
}
$posts = $query->get();
return response()->json($posts);
}
Khi dùng thư viện trên
public function index(Request $request)
{
$query = Post::filter()->get();
return response()->json($posts);
}
Thật là ngắn gọn và súc tích phải không nào !!!
Cách cài đặt và sử dụng
Mở terminal của project lên và cài bằng composer nhé:
composer require abbasudo/laravel-purity
php artisan vendor:publish --tag=purity
Lệnh này để publish thư mục `config/purity` cho phép chúng ta có thể custom được filter mà chúng ta muốn.
Vậy là thư viện đã sẵn sàng để sử dụng. Tiếp theo hãy tìm tới Model mà bạn muốn filter nhé. Ở đây mình đang filter cho Model Post
<?php
namespace App\Models;
use Abbasudo\Purity\Traits\Filterable;
use Abbasudo\Purity\Traits\Sortable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
use Filterable;
use Sortable;
protected $filterFields = [
'id',
'title',
'content',
'published_at',
'category_id',
'category'
];
public function category()
{
return $this->belongsTo(Category::class);
}
}
Các bạn chỉ cần Use Filterable và Sortable của thư viện để sử dụng. Mảng $filterFields là những giá trị mình muốn filter nhé. Ở đây mình có Category là relation của Post.
Tiếp theo trong function của mình dùng câu lệnh này nữa là oke nhoé :))
return Post::sort()->filter()->with('category')->get();
Đây là một url để chúng ta filters nhé
GET /api/posts?filters[field][operator]=value
Dưới đây là một số operator mà thư viện hỗ trợ
Test kết quả
Dưới đây là video mình test bằng Postman. Các bạn có thể test thử xem nhé!
Tổng kết
Đây là một thư viện khá hay mà mình vô tình đọc được. Ở trên mình tập trung nhiều cho phần filter, còn sort cũng khá hay, các bạn khám phá thử xem nhá.
Hy vọng các bạn cảm thấy nó thú vị và có thể áp dụng vào dự án nếu có những tính năng tương tự. Cảm ơn mọi người đã dành thời gian đọc ạ ☺️☺️☺️
Nguồn: