hamidreza-mozhdeh / filter-by-query-string
本软件包最新版本(v1.0.3)没有提供许可证信息。
通过URL查询字符串和Eloqunet的作用域过滤Laravel Eloquent的结果。
v1.0.3
2023-12-15 15:22 UTC
Requires
- php: >=8.0
- laravel/framework: >=9.0
README
如果你喜欢它,请给它一个星标。
关于通过查询字符串过滤
使用此软件包,您可以通过使用URL查询字符串简单地使用Eloquent作用域来过滤模型结果。此存储库的优势在于您可以在业务逻辑(控制器、服务等)中重用您的本地作用域。
- 它是安全的
- 可重用本地作用域
- 易于实现
- 可定制
如何安装
运行composer require hamidreza-mozhdeh/filter-by-query-string
。它将为您的项目添加一个FilterByQueryString
特质。
如何使用
- 将特质添加到您的模型中
use FilterByQueryString;
。
分类模型
class Category extends Model
{
use CategoryScopesTrait;
use FilterByQueryString;
}
- 在控制器中简单地将表单请求传递到模型
分类控制器
class CategoryController extends Controller
{
public function index(CategoryRequest $request)
{
return Category::filter($request)->get();
}
分类请求
class CategoryRequest extends FormRequest
{
public function rules(): array
{
return [
'name' => ['sometimes', 'string', 'min:3', 'max:254'], // A single filter
// Use Associative example
'date-between' => ['sometimes', 'array'], // A filter with two values
'date-between.from' => ['sometimes', 'date'], // Associative array
'date-between.to' => ['sometimes', 'date'], // Associative array
// Or Indexed example
'date-between' => ['sometimes', 'array'], // A filter with two values
'date-between.*' => ['sometimes', 'date'], // Indexed array
];
}
}
- 定义作用域以使用过滤器
- 最好在某个位置创建模型目录和特质,例如
App\Models\Traits\Scopes\CategoryScopesTrait
。
- 最好在某个位置创建模型目录和特质,例如
CategoryScopesTrait
trait CategoryScopesTrait
{
public function scopeName(Builder $query, string $name): Builder
{
return $query->where('name', 'like', "%{$name}%");
}
public function scopeDateBetween(Builder $query, string $from, string $to): Builder
{
return $query->whereBetween('created_at', [$from, $to]);
}
}
- 例如,要过滤名称为"ossw"的分类,请使用
http://0.0.0.0/api/categories?name=ossw
- 要使用日期进行过滤,请使用
索引数组:http://0.0.0.0/api/categories?date-between[]=2023-11-23&date-between[]=2023-11-25
关联数组:http://0.0.0.0/api/categories?date-between[from]=2023-11-23&date-between[to]=2023-11-25
自定义
$categories = Category::filter(
request: $request,
only: ['name'], // Only accept this filter.
except: ['date-between'], // Do not accept the `date-between` method.
prefix: 'filters', // Add `filters` as array prefix.
requestMethod: 'input' // The default get method is validated but you can choose different one.
);
使用前缀:http://0.0.0.0/api/categories?filters[name]=ossw