kblais/query-filter

轻松为您的Eloquent模型创建过滤器。

v3.2.0 2024-04-16 12:11 UTC

README

轻松为您的Eloquent模型创建过滤器。

基于Jeffray Way的Laracast教程

安装

您可以通过composer安装此包

composer require kblais/query-filter

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="Kblais\QueryFilter\QueryFilterServiceProvider" --tag="query-filter-config"

这是发布配置文件的内容

return [
    'default-filters-source' => null,
];

用法

QueryFilter是一个类,可以根据数组或请求应用多个条件。

您可以直接从过滤器方法中调用任何Eloquent方法。

use Kblais\QueryFilter\QueryFilter;

class PostFilter extends QueryFilter
{
    public function title($value)
    {
        return $this->where('foo', 'bar');
    }

    public function author($value)
    {
        return $this->whereHas('author', function ($builder) use ($value) {
            $this->where('name', $value);
        });
    }
}

为了允许模型使用查询过滤器,您必须在您的模型上添加Filterable特性。

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Kblais\QueryFilter\Filterable;

class Post extends Model
{
    use Filterable;
}

然后您可以从任何地方使用filter()作用域

// From an array...
$filterInput = [
    'title' => 'Les Trois Mousquetaires',
];

$posts = Post::filter(PostFilter::make($filterInput))->get();

// ...Or in a controller action
public function index(PostFilter $filter)
{
    // Filter is automatically populated with Request data when injected
    return Post::filter($filter)->get();
}

如果您的过滤器参数始终放置在数组键中(例如filters),您可以在配置文件中定义default-filters-source配置键,或在您的QueryFilter中添加protected string $source = 'filters'

常见问题

调用未定义的方法App\QueryFilters\YourFilter::anEloquentScope()。与PHPStan

要修复此错误消息,请向您的过滤器添加以下DocBlock

/**
 * @mixin \App\Models\ModelOfYourScope
 */

测试

测试套件由3个测试组成:PHPCsFixer(编码风格)、PHPStan(静态分析)和PHPUnit(单元测试)。

您可以通过运行以下命令来运行所有这些测试

composer tests

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

  • 遵循PSR-2编码标准。使用PHP-CS-Fixer应用约定。
  • 为您添加的功能和发现的错误添加测试。

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件