alexskoromnui / laravel-filters
动态创建带有过滤器的查询以进行搜索
1.0.0
2021-04-30 10:10 UTC
Requires
- php: >=7.1.0
- illuminate/support: ~5.4|~6.0|~7.0|~8.0
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
假设ExampleModel有name属性,并且在请求中我们有?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() ..)