otisz/laravel-eloquent-filter

从 URL 查询中灵活的 Eloquent 过滤器

v2.4.0 2024-05-30 14:48 UTC

This package is auto-updated.

Last update: 2024-09-06 13:00:14 UTC


README

Latest Version on Packagist Software License Total Downloads

Laravel 包,用于生成灵活的 Eloquent 过滤器。

安装

您可以通过 Composer 安装此包

composer require otisz/laravel-eloquent-filter

使用方法

使用 artisan 命令创建新的过滤器类

php artisan make:filter TestFilter

此命令将在 app/Filters 文件夹中生成一个新的过滤器类

<?php

namespace App\Filters;

use Illuminate\Http\Request;
use Otisz\EloquentFilter\Filter;

/**
 * @property \Illuminate\Database\Eloquent\Builder $builder
 * @method static \App\Filters\TestFilter boot($class)
 * @mixin \Illuminate\Database\Eloquent\Builder
 */
final class TestFilter extends Filter
{
        /**
         * @param  \Illuminate\Http\Request|null  $request
         *
         * @return self
         */
        public function search(Request $request = null)
        {
            //
    
            return $this;
        }
    
        /**
         * @param  \Illuminate\Http\Request|null  $request
         *
         * @return self
         */
        public function order(Request $request = null)
        {
            //
    
            return $this;
        }
}

如何在控制器中使用

有三种方法来启动过滤器类

// Eloquent Builder:
TestFilter::boot(Model::query());
TestFilter::boot(Model::where('column', '=', 1));

// Namespace
TestFilter::boot(Model::class);

// Model
TestFilter::boot(new Model);

过滤器类包含两个方法:search()order()
您可以将 \Illuminate\Http\Request\Illuminate\Foundation\Http\FormRequest 传递给这些方法,但不强制要求。

TestFilter::boot(Model::class)->search()->order();

如果您调用过滤器类中未定义的方法,它将自动调用 Builder 类。

例如,过滤器类没有 toSql() 方法:TestFilter::boot(Model::class)->toSql();

在这种情况下,toSql() 方法在 Builder 类中调用:$this->builder->toSql()

如果需要,您可以随意编写您的方法。

贡献

安全漏洞

如果您发现任何与安全相关的问题,请通过 leventeotta@gmail.com 发送电子邮件,而不是使用问题跟踪器。所有安全漏洞都将得到及时处理。

许可证

Laravel Eloquent Filter 包是开源软件,采用 MIT 许可证