williamoliveira / eloquent-array-query-builder
使用数组查询Laravel Eloquent
1.4.5
2020-08-18 19:57 UTC
Requires
Requires (Dev)
- mockery/mockery: ^1.0
- phpunit/phpunit: ^7.0
- squizlabs/php_codesniffer: ^3.2
- symfony/var-dumper: ^3.3.0
This package is auto-updated.
Last update: 2024-09-19 04:43:39 UTC
README
为什么要这样做呢?
这样你可以轻松地使用查询“语言”来查询数据,无需手动编写长条件查询,对于REST API非常有用。
如何安装
composer require williamoliveira/eloquent-array-query-builder
如何使用
我们将请求到模型的连接工作留给你,因此你可以在任何地方使用它。
控制器中的示例
public function index(Request $request, \Williamoliveira\ArrayQueryBuilder\ArrayBuilder $arrayBuilder) { $query = User::query(); $query = $arrayBuilder->apply($query, $request->all()); return $query->paginate($request->get('per_page')); // Note it does not do pagination or call get(), // you need to do it yourself }
你还可以在你的模型中使用ArrayQueryable特质
// Model class User extends Model{ use \Williamoliveira\ArrayQueryBuilder\Traits\ArrayQueryable; // ... // Usage return User::arrayQuery($request->all())->get(); //static return (new User())->newArrayQuery($request->all())->get(); //instance
查询格式
以下是一个查询可能的样子示例
$exampleArrayQuery = [ 'where' => [ 'name' => ['like' => '%joao%'], 'created_at' => [ 'between' => [ '2014-10-10', '2015-10-10', ], ], 'or' => [ // nested boolean where clauses 'foo' => 'bar', 'baz' => 'qux', ], ], 'fields' => ['id', 'name', 'created_at'], 'order' => 'name', 'include' => [ // relations, can have where, order and fields 'permissions' => true, 'roles' => [ 'where' => [ 'name' => 'admin', ], 'fields' => ['id', 'name'], 'order' => 'name DESC', ], ], 'groupBy' => ['foo', 'bar', 'baz'], 'having' => [ 'foo' => 'x', 'bar' => ['in' => ['1', '2']], 'baz' => ['neq' => '3'], ], 'offset' => 5, 'limit' => 15, ];
仅作为参考,构建REST API的人可以使用相同的查询字符串
?where[name][like]=%joao%
&where[created_at][between][]=2014-10-10
&where[created_at][between][]=2015-10-10
&where[or][foo]=bar
&where[or][baz]=qux
&fields[]=id
&fields[]=name
&fields[]=created_at
&order=name
&include[permissions]=true
&include[roles][where][name]=admin
&include[roles][fields][]=id
&include[roles][fields][]=name
&include[roles][order]=name DESC
&groupBy[]=foo
&groupBy[]=bar
&groupBy[]=baz
&having[foo]=x
&having[bar][in][]=1
&having[bar][in][]=2
&having[baz][neq]=3
&offset=5
&limit=15
提示:对于JavaScript,你可以使用 Qs 创建查询字符串。
Where/Having运算符别名
'eq' => '=',
'neq' => '<>',
'gt' => '>',
'gte' => '>=',
'lt' => '<',
'lte' => '<=',
'nlike' => 'not like',
'nin' => 'not in',
'notnull' => 'not null',
'nn' => 'not null',
'inq' => 'in'