red-fern / laravel-array-query-builder
使用数组查询优雅模型
0.3.0
2020-11-05 15:37 UTC
Requires
- php: ^7.1
- illuminate/database: 5.7.* || 5.8.* || ^6.0 || ^7.0
- illuminate/support: 5.7.* || 5.8.* || ^6.0 || ^7.0
Requires (Dev)
- mockery/mockery: ^1.2
- orchestra/testbench: 3.7.* || 3.8.* || ^4.0 || ^5.0
- phpunit/phpunit: ^7.0 || ^8.0
This package is auto-updated.
Last update: 2024-09-06 05:12:28 UTC
README
此包允许您使用多维数组向优雅查询构建器添加 WHERE 子句。通过遵循简单的结构,您可以链式添加多个查询条件、嵌套条件和关联查询。
$queryArray = [
'condition' => 'or',
'rules' => [
[
'field' => 'name',
'operator' => '=',
'value' => 'john'
],
[
'field' => 'age',
'operator' => '>',
'value' => 25
],
]
];
$users = User::arrayWheres($queryArray)->get();
条件 描述了匹配规则是如何应用的。在这种情况下,name 和 age 字段将包含在一个 OR 查询中。
上述部分将生成以下优雅查询构建器
$users = User::where('name', 'john')
->orWhere('age', '>', 25)
->get();
操作类型
在查询字段时,有几种操作符选项。这些选项包括
比较操作符
标准比较操作符,例如 =, <, >, <=, >=。以下是一个示例
$rules = [
'field' => 'age',
'operator' => '>=',
'value' => 25
];
这变成
$query->where('age','>=',25);
空值检查
检查列是否为 "null" 或 "not null",例如。
$rules = [
'field' => 'dob',
'operator' => 'null'
];
这变成
$query->whereNull('dob');
范围查询
检查字段值是否在值数组中
$rules = [
'field' => 'age',
'operator' => 'between',
'value' => [20, 50]
];
这变成
$query->whereBetween('age', [20, 50]);
在/不在值列表中
检查字段值是否为 "in" 或 "not in" 值数组
$rules = [
'field' => 'id',
'operator' => 'in',
'value' => [2, 5, 6]
];
这变成
$query->whereIn('id', [2, 5, 6]);
字符串比较
检查字段值是否包含字符串。这基本上是一个通配符 like 查询的别称,例如。
$rules = [
'field' => 'name',
'operator' => 'contains',
'value' => 'john'
];
这变成
$query->where('name', 'like', '%john%');
关系
您还可以使用点符号查询优雅关系。
$queryArray = [
'condition' => 'and',
'rules' => [
[
'field' => 'name',
'operator' => 'like',
'value' => '%john%'
],
[
'field' => 'orders.order_date',
'operator' => '>',
'value' => '2019-01-01 00:00:00'
]
]
];
$users = User::arrayWheres($queryArray)->get();
在字段中使用点符号将确定它将查询,在这种情况下是 orders 关系。上述查询将变为
$users = User::where('name', 'like', '%john%')
->whereHas('orders', function($q) {
$q->where('order_date', '>', '2019-01-01 00:00:00');
})->get();
嵌套查询
您还可以添加嵌套条件来构建更复杂的查询,例如
$rules = [
'condition' => 'and',
'rules' => [
[
'condition' => 'or',
'rules' => [
[
'field' => 'name',
'operator' => '=',
'value' => 'john'
],
[
'field' => 'name',
'operator' => '=',
'value' => 'james'
],
]
],
[
'field' => 'orders.order_date',
'operator' => '>',
'value' => '2010-01-01 00:00:00'
],
]
];
$users = User::arrayWheres($queryArray)->get();
上述示例显示了如何向数组添加嵌套条件规则。这遵循相同的格式,您可以嵌套到任何深度。上述示例将变为
$users = User::where(function($q) {
$q->where('name', '=', 'john')
->orWhere('name', '=', 'james');
})
->whereHas('orders', function($q) {
$q->where('order_date', '>', '2010-01-01 00:00:00');
})->get();
未来开发
计划扩展此包的功能,将数组功能扩展到允许查询选择、连接、排序、分组等。