dingquochan/laravel-query-filters

Laravel中的查询过滤器

0.2.0 2021-12-14 02:52 UTC

This package is auto-updated.

Last update: 2024-09-14 08:28:00 UTC


README

Latest Version on Packagist Build Status Total Downloads

Laravel查询过滤器,用于Laravel

要求

  • PHP >= 7.4, >= 8.0
  • Laravel >= 6.0

安装

您可以通过composer安装此包

composer require dinhquochan/laravel-query-filters

如果您不使用自动发现,请将ServiceProvider添加到config/app.php中的providers数组中

\DinhQuocHan\QueryFilters\QueryFilterServiceProvider::class,

基本用法

创建基本过滤器 app/Filters/PostFilter.php

<?php

namespace App\Http\Filters;

use DinhQuocHan\QueryFilters\QueryFilter;

class PostFilter extends QueryFilter
{
    /**
     * Filter by user id.
     *
     * @param  int  $id
     * @return void
     */
    public function userId($id)
    {
        $this->getQuery()->where('user_id', $id);
    }
}

App\Http\Controllers\PostController

<?php

namespace App\Http\Controllers;

use App\Post;
use App\Http\Filters\PostFilter;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @param  \App\Http\Filters\PostFilter  $filter
     * @return \Illuminate\Http\Response
     */
    public function index(PostFilter $filter)
    {
        $posts = $filter->of(Post::class)->get();
        // or $filter->of(Post::query())->get();
        // or $filter->of(new Post())->get();

        // Send it to view.
        return view('posts.index', compact('posts'));
    }
}

创建新的过滤器

该包包含一个Artisan命令用于创建新的过滤器。

php artisan make:filter PostFilter

此过滤器将具有App\Http\Filters命名空间,并保存在app/Http/Filters中。

或者到自定义命名空间,例如App\Blog

php artisan make:filter "Blog/PostFilter"

此过滤器将具有App\Blog命名空间,并保存在app/Blog中。

可用的特性

可排序

允许排序项目,您必须添加$sortable属性,默认情况下如果不调用sortsort_by在请求中,特性将为查询添加默认排序列

<?php

namespace App\Http\Filters;

use DinhQuocHan\QueryFilters\SortableQueryFilter;
use DinhQuocHan\QueryFilters\QueryFilter;

class PostFilter extends QueryFilter
{
    use SortableQueryFilter;

    /**
     * Sort direction.
     *
     * @var string
     */
    protected $sortDirection = 'desc';

    /**
     * Default sort by column.
     *
     * @var string
     */
    protected $sortBy = 'created_at';

    /**
     * Sortable columns.
     *
     * @var array
     */
    protected $sortable = [
        'created_at',
    ];
}

示例

> your-url?sort_by=id
> SELECT * FROM `posts` ORDER BY `id` ASC

> your-url?sort_by=id&sort=desc
> SELECT * FROM `posts` ORDER BY `id` DESC

可搜索

允许搜索项目,您必须添加$searchable属性

<?php

namespace App\Http\Filters;

use DinhQuocHan\QueryFilters\SearchableQueryFilter;
use DinhQuocHan\QueryFilters\QueryFilter;

class PostFilter extends QueryFilter
{
    use SearchableQueryFilter;

    /**
     * Searchable columns.
     *
     * @var array
     */
    protected $searchable = [
        'id', 'title',
    ];
}

示例

> your-url?search=foo or your-url?q=foo
> SELECT * FROM `posts` WHERE (`id` LIKE '%foo%' OR `title` LIKE '%foo%')

> your-url?search=foo*
> SELECT * FROM `posts` WHERE (`id` LIKE 'foo%' OR `title` LIKE 'foo%')

> your-url?search=*foo
> SELECT * FROM `posts` WHERE (`id` LIKE '%foo' OR `title` LIKE '%foo')

// your-url?search=foo&search_by=title
// SELECT * FROM `posts` WHERE `title` LIKE '%foo%'

测试

composer test

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

请参阅贡献指南以获取详细信息。

安全

如果您发现任何与安全相关的问题,请通过contact@dinhquochan.com发送电子邮件,而不是使用问题跟踪器。

致谢

许可

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