alexskoromnui/laravel-filters

动态创建带有过滤器的查询以进行搜索

1.0.0 2021-04-30 10:10 UTC

This package is not auto-updated.

Last update: 2024-09-27 23:42:21 UTC


README

动态添加新搜索过滤器的包。

安装包

composer require alexskoromnui/laravel-filters

用法

为了演示,我将使用位于app文件夹中的ExampleModel类,该模型的过滤器将位于Filters文件夹中。

步骤 1

您的搜索模型应该实现此包中的SearchableModel接口,该接口有一个方法getFiltersNamespace(),在该方法中,您应该指定此模型的过滤器命名空间。


namespace App;

use Illuminate\Database\Eloquent\Model;

class ExampleModel extends Model implements SearchableModel
{
	    public function getFiltersNamespace(): string
    {
        return 'App\Filters';
    }
}

步骤 2

假设ExampleModelname属性,并且在请求中我们有?name=TEST

步骤 3

您应该创建一个过滤器并实现此包中的Filter接口,该接口有一个方法apply(Builder $builder, $value),在其中您应该编写您的查询。

namespace App\Filters;

use Illuminate\Database\Eloquent\Builder;
use Skoromnui\Filters\Filter;

class Name implements Filter
{
    public function apply(Builder $builder, $value)
    {
        return $builder->where('name', 'like', '%' . $value . '%');
    }
}

步骤 4

完成所有这些步骤后,您的控制器或服务将类似于以下内容

use App\Http\Controllers\Controller;
use App\ExampleModel;
use Illuminate\Http\Request;
use Skoromnui\Filters\Service\SearchService;

class ExampleController extends Controller
{
    public function search(Request $request, SearchService $searchService)
    {
        $query = $searchService->buildQuery($request, new ExampleModel());
        
        $result = $query->get();

        return response()->json($result);
    }
}

步骤 5

此包中的SearchService负责构建查询,之后您可以使用任何方法,如(get(), paginate(), limit(), offset(), count() ..)