ahmadhsalim / eloquent-filter-resolver
将基于字符串的过滤查询解析为Eloquent查询。
Requires
- php: ^8.1
- illuminate/database: ^9.0|^10.0
This package is auto-updated.
Last update: 2024-09-07 18:26:46 UTC
README
Eloquent Filter Resolver是一个允许你在Laravel中将过滤字符串解析为Eloquent查询的包。它提供了一个方便的方式来根据各种条件和运算符过滤Eloquent模型。
安装
您可以通过Composer安装Eloquent Filter Resolver包。运行以下命令
composer require ahmadhsalim/eloquent-filter-resolver
用法
要使用Eloquent Filter Resolver,请参考以下示例
use App\Http\Controllers\Controller; use App\Models\User; use Salim\FilterResolver\EloquentFilterResolver; class UserController extends Controller { public function index() { $query = User::query(); $filter = 'contains(name, "john") and eq(status, active)'; EloquentFilterResolver::resolve($query, $filter); return $query->paginate(); } }
在上面的示例中,我们为User模型创建了一个Eloquent查询,并使用Eloquent Filter Resolver应用了一个过滤器。过滤器字符串contains(name, "john") and eq(status, active)过滤出名字包含"john"且状态为活跃的用户。
支持的运算符
Eloquent Filter Resolver支持以下运算符
contains:使用LIKE运算符进行不区分大小写的搜索。对于pgsql驱动程序使用ILIKE。用法:contains(field, value)。eq:使用=运算符进行相等比较。用法:eq(field, value)。ne:使用!=运算符进行不等比较。用法:ne(field, value)。gt:使用>运算符进行大于比较。用法:gt(field, value)。gte:使用>=运算符进行大于等于比较。用法:gte(field, value)。lt:使用<运算符进行小于比较。用法:lt(field, value)。lte:使用<=运算符进行小于等于比较。用法:lte(field, value)。in:对多个值执行IN比较。值可以用|分隔。用法:in(field, "value1|value2|value3")。notIn:对多个值执行NOT IN比较。值可以用|分隔。用法:notIn(field, "value1|value2|value3")。
值格式
- 字符串值可以用双引号括起来。示例:
eq(name, "John Doe")。 - 字符串中的双引号可以用反斜杠(
\)转义。示例:eq(name, "John \"The Man\" Doe")。 - 如果值包含逗号、括号或空格,则必须用双引号括起来。示例:
eq(name, "John Doe, Jr.")。
布尔值和空值
- 当值为
"true"或"false"时,它将被解析为布尔值。 - 当值为
"null"时,它将被解析为null。
嵌套括号
Eloquent Filter Resolver支持嵌套括号以创建复杂的过滤表达式。例如
$filter = 'eq(name, "John") and (eq(status, "active") or eq(status, "inactive"))';
在上面的示例中,过滤条件检查名字是否为"John"且状态为"active"或"inactive"。
与关系一起使用
Eloquent Filter Resolver还支持使用点表示法对相关模型进行过滤。例如
$filter = 'eq(user.role.name, "admin")';
在上面的示例中,过滤条件检查用户的相关role名称是否等于"admin"。
布尔值和空值的使用
布尔值和空值可以如下用在过滤条件中
$filter = 'eq(is_active, true) and eq(deleted_at, null)';
在上面的示例中,过滤条件检查is_active字段是否为真且deleted_at字段是否为空。
贡献
欢迎为Eloquent Filter Resolver包做出贡献。如果您发现任何问题或想提出改进建议,请创建GitHub问题
许可证
Eloquent Filter Resolver包是开源软件,根据MIT许可证授权。