janakkapadia/filterable
最新稳定版本:0.0.7
Composer 安装命令:
composer require janakkapadia/filterable
包简介
Enhance your Laravel app with dynamic, customizable filtering for Eloquent models. This package provides an easy setup for multi-parameter filtering, custom logic, and relationship support—perfect for building flexible, data-driven features like admin panels and reports.
README 文档
README
A custom Laravel package for dynamic filtering of models, built to simplify the process of filtering data in Laravel applications.
Installation
-
Install via Composer
Run the following command to add the package to your Laravel project:
composer require janakkapadia/filterable
-
Usage
This package provides a command to generate filter models dynamically.
Creating a New Filter Model:
php artisan filter:model {ModelName} -
Add Filter Trait to Your Model
use JanakKapadia\Filterable\Traits\Filter; class YourModel extends Model { use Filter; // Additional model code... }
-
Usage In Controller
Basic filtering:
public function index(Request $request) { $data = YourModel::filter()->get(); }
With parentheses wrapping where conditions:
public function index(Request $request) { $data = YourModel::filter(true)->get(); }
-
Request Example
To filter and sort the data, you can make a request like this:
GET URL/your-model?sort_by=id&search=title&status=active -
Example Usage For Model Filter File
In your filter model (YourModelFilter.php), you can define both filter and sort methods:
class YourModelFilters extends Filter { // Define your filterable fields protected array $filters = ['search', 'status']; // Define your sortable fields protected array $sort = ['sort_by']; // Sort method public function sort_by($column): void { $this->builder->orderBy($column); } // Filter methods public function search($keyword): void { $this->builder->where(function ($query) use ($keyword) { $query->where('field1', 'like', "%$keyword%") ->orWhere('field2', 'like', "%$keyword%"); }); } public function status($status): void { $this->builder->where('status', $status); } }
-
Query Examples
Without parentheses (
filter()):SELECT * FROM your_models WHERE field1 LIKE '%keyword%' OR field2 LIKE '%keyword%' AND status = 'active' ORDER BY id DESC
With parentheses (
filter(true)):SELECT * FROM your_models WHERE (field1 LIKE '%keyword%' OR field2 LIKE '%keyword%') AND (status = 'active') ORDER BY id DESC
The parentheses version ensures proper grouping of conditions and can prevent unexpected results when combining multiple filters.
-
Advanced Features
- Parentheses Wrapping: Use
filter(true)to wrap where conditions in parentheses for complex queries - Filter Chaining: You can chain multiple filter operations together
- Separate Filter and Sort Fields: Define filterable fields in
$filtersarray and sortable fields in$sortarray
- Parentheses Wrapping: Use
统计信息
- 总下载量: 16
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-11-08