musta20 / laravel-records-filter
一个用于筛选记录的laravel包
1.0.3
2024-08-24 07:06 UTC
Requires
- illuminate/support: ^10.48
Requires (Dev)
- tightenco/duster: ^2.7
README
Laravel记录筛选提供了一种简单直观的方法来筛选和排序Laravel应用程序中的记录。它模仿了Laravel分页器的熟悉语法,使得实现复杂的筛选逻辑变得简单。
要求
此包要求您的应用在视图中包含tailwind和alpinejs。
安装
您可以通过composer安装此包
composer require musta20/laravel-records-filter
如果您没有运行vite dev,请确保重建tailwind资源
yarn vite build
使用此包
在模型中使用HasFilter特质
use Musta20\LaravelRecordsFilter\HasFilter; class Post extends Model { use HasFactory, HasFilter;
根据您的需求在模型中实现以下函数
排序
以下示例展示了如何实现排序
public function sortFilterOptions() { return [ [ "lable" => "oldest", // label name to display in the filtering form "type" => 'ASC', // sorting type "filed" => "created_at" // talbel filed name ], [ "lable" => "newest", "type" => 'DESC', "filed" => "created_at" ], [ "lable" => "high price", "type" => 'DESC', "filed" => "price" ], [ "lable" => " lowest price", "type" => 'ASC', "filed" => "price" ], ]; }
根据关系筛选
您可以根据与其他表的关系筛选记录
public function relationsFilterOptions() { return [ [ 'label' => 'auther', // label name to display in the filtering form 'label_filed' => 'name', // filed name in the relation tabel 'id' => 'user_id', // label name in the relation tabel 'model' => 'App\Models\User', ], [ 'label' => 'category', 'label_filed' => 'name', 'id' => 'category_id', 'model' => 'App\Models\category', ] ]; }
搜索
您可以通过在搜索函数中定义表名来在记录中进行搜索
public function searchFields() { return [ 'title', 'body' ]; }
筛选
您可以定义如下的筛选术语
public function filterOptions() { return [ [ 'label' => 'reviewing', // label name to display in the filtering form 'type' => 'checkbox', // checkbox | select | radio group | date | between 'filed' => 'article_type', // filed name in the tabel 'operation' => '=', // opertaion type 'options' => [ // the values you want to filter based on 'reviewed' => 1, // the first key will be used as label 'not reviewed' => 0 ], ], [ 'label' => 'publish status', 'type' => 'select', //checkbox | select | radio group | date | between 'filed' => 'is_published', 'options' => [ 'drafted' => 0, 'publish' => 1 ] ], [ 'label' => 'font size', 'type' => 'radio group', //checkbox | select | radio group | date | between 'filed' => 'font_type', 'options' => [ 'small' => 10, 'big' => 20 ] ], [ 'label' => 'issue date', 'type' => 'date', //checkbox | select | radio group | date | between 'filed' => 'created_at', 'operation' => '=' ] , [ 'label' => 'issue period', 'type' => 'range', //checkbox | select | radio group | date | between 'filed' => 'created_at', 'inputType' => 'date',//date/number 'operation' => 'between', 'options' => [ 'from', 'to' ] ] , [ 'label' => 'price range', 'type' => 'range', //checkbox | select | radio group | date | between 'filed' => 'price', 'inputType' => 'number',//date/number 'operation' => 'between', 'options' => [ 'max', 'min' ] ] ]; }
查询
您必须使用Filter()函数来检索数据,请记住您必须在查询的最后调用它,不要调用paginate,因为它会自动分页
$posts= Post::filter(); // or $posts= Post::where('name','alie')->filter();
最后,在视图中调用filter nav函数。
{{ $posts->filterLinks() }}
您可以使用不同的视图,如nav-filter,以线性视图显示所有筛选选项
{{ $posts->filterLinks('laravelRecordsFilter::nav-filter') }}
您还可以通过以下函数在侧边栏视图中显示筛选选项
对于侧边栏
{{ $posts->filterLinks('laravelRecordsFilter::sidebar-filter') }}
对于导航
{{ $posts->filterNav() }}
当然,视图不一定总是与您的风格匹配,因此您可以将视图发布并按需编辑它
php artisan vendor:publish --tag=laravel-Records-Filter
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。