ravaelles/filterable

Laravel 5.* 处理记录过滤的包

v2.1.2 2017-06-29 16:08 UTC

This package is not auto-updated.

Last update: 2024-09-21 18:02:48 UTC


README

Software License

处理Laravel 5.*中记录过滤的包,准备与MongoDB一起工作。

轻松定义过滤器。通过使用提供的bootstrap视图,可以显示所有过滤器并正确地样式化选择元素(以及更多!)。哦,还有一个很棒的搜索框! :)

安装

通过Composer

$ composer require ravaelles/filterable

用法

(1)   打开 config/app.php 并在providers的末尾添加此条目

\Ravaelles\Filterable\FilterableServiceProvider::class,

(2)   现在在项目根目录下打开命令行并发布视图

php artisan vendor:publish

您可以自由修改它,现在它在 resources\views\packages\filterable\filtering.blade.php

(3)   注意到 filtering.blade.php 使用了 @push('scripts') 操作符。它将所有javascript脚本追加到html的末尾,当jQuery已经被加载以避免 jQuery is not defined 错误。为了使其工作,请添加 @stack('scripts') 部分在您使用 <script> 标签加载最后一个脚本之后。注意,@stack blade操作符自Laravel 5.2.20以来可用。

(4)   现在在您的模型中添加此特性

use Ravaelles\Filterable\Filterable as Filterable;
(..)
class MyModelName extends Model 
{
    use Filterable; // Add trait

您想要可过滤的每个模型都需要此特性。

(5)   现在是定义要使用的过滤器的时候了(变量 $filters)。我们将定义一些示例过滤器,以便您可以了解它是如何工作的。在您的控制器中,就在您检索记录的地方,添加以下内容

$filters = [

    // First filter
    'status' => [ // Db field name
        'Status' => [ // Field name to be shown for user
            1 => "Created", // [Values => Display names] for select element
            2 => "Awaiting signature",
            3 => "Canceled",
            4 => "Signed",
        ]
    ],
    
    // Second filter
    'template_id' => [
        'Template' => [0 => "No", 1 => "Yes"]
        // 'Template' => Template::orderBy('id', -1)->pluck('name', 'id')->all() // Or use something like this
    ],
    
    // You can add more filters here
    //'field_name' => [
    //     'Display name' => ["black" => "Black tea", "green" => "Green tea"]
    //],
];

$users = User::orderBy('id')
	->filterable($filters)
	->paginate(10);

注意,您可以在 ->filterable 部分之前应用自己的,自定义的 where 子句。

(6)   最后,在您的视图中添加以下行,它将自动使用选择显示过滤器

@include('vendor.filterable.filtering')

您可以随意修改此文件。

(7)   如果您想使用搜索框功能,请确保在控制器中添加 ->searchable() 行,如下所示

$users = User::orderBy('id')
    ->searchable()
	->filterable($filters)
	->paginate(10);

...并在您的模型中添加一个您想要搜索的字段列表,例如。

public $searchable = [
    'name', 'email', 'address'
];

它将在这些字段中的任何字段中搜索搜索框中的文本。

(8)   您现在可以使用此包并动态过滤记录! :)

许可协议

MIT许可(MIT)。请参阅许可文件以获取更多信息。