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许可证授权。