laraditz/model-filter

一个简单的优雅模型过滤器。

安装: 89

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:laravel-package

1.0.4 2024-05-15 08:48 UTC

This package is auto-updated.

Last update: 2024-09-15 09:41:26 UTC


README

Latest Stable Version Total Downloads License StyleCI

为 Laravel 和 Lumen 提供一个简单的优雅模型过滤器。

安装

通过 Composer

$ composer require laraditz/model-filter

配置

将以下片段中的过滤器特质添加到您的模型中

use Laraditz\ModelFilter\Filterable;

class User extends Model implements AuthenticatableContract, AuthorizableContract
{
    use Filterable;
    ...
}

App/Filters 文件夹下创建以 <model_name>Filter 格式的过滤器类。例如,对于 User 模型,您需要创建 UserFilter 类。

以下片段显示了 UserFilter 可能的样子

namespace App\Filters;

use Laraditz\ModelFilter\Filter;
use Illuminate\Database\Eloquent\Builder;

class UserFilter extends Filter
{
    public function name(string $value)
    {
        $this->where('name', 'LIKE', $value);
    }

    public function email(string $value)
    {
        $this->where('email', 'LIKE', "%$value%");
    }

    // Filter relationship
    public function rank($value)
    {
        $this->whereHas('rank', function (Builder $query) use ($value) {
            $query->where('level', 'like', $value);
        });
    }
}

如果您想对哪些属性可以进行筛选有更多的控制,您可以在模型中添加 filterable 数组

protected $filterable = [
    'name', 'email'
];

用法

在您的控制器中,调用 filter 方法并将输入数据传递给您创建的过滤器。

$users = User::filter($request->all())->get();

您的请求查询字符串可能如下所示。

/users?name=farhan&rank=novice

您还可以传递 sort 参数以对结果进行排序。

/users?name=farhan&rank=novice&sort=name,level

通过在字段名称前添加 - 符号按降序排序

/users?name=farhan&rank=novice&sort=-name,level

就这样!

致谢

许可证

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