kalmanolah / php-query-filters
此软件包已被废弃,不再维护。未建议替代软件包。
通过任意标准简化查询过滤的实用工具。
dev-master
2016-10-10 18:20 UTC
Requires
- php: ^5.3.3 || ^7.0
Requires (Dev)
- doctrine/orm: ^2.5
- mongodb/mongodb: ^1.0.0
- phpunit/phpunit: ^5.6
Suggests
- doctrine/orm: Allows filtering of Doctrine ORM queries (using QueryBuilder)
- mongodb/mongodb: Allows filtering of MongoDB queries (using arrays)
This package is not auto-updated.
Last update: 2023-07-08 12:51:07 UTC
README
php-query-filters 是一个包含工具的库,允许轻松过滤查询。这对于试图创建允许用户根据任意标准过滤数据的 REST API 的人来说非常有用。
目前支持的有
-
摘要
- 浮点转换器
- 整数转换器
-
基于 Doctrine ORM QueryBuilder 的查询
- 自动连接
- GT/GTE 过滤器
- LT/LTE 过滤器
- EQ/NE 过滤器
- NULL/NOT NULL 过滤器
- LIKE 过滤器
- OR 过滤器
- 日期时间转换器
-
基于 MongoDB 数组的查询
- GT/GTE 过滤器
- LT/LTE 过滤器
- EQ/NE 过滤器
- NULL/NOT NULL 过滤器
- LIKE 过滤器(使用 $regex)
- GEONEAR 过滤器(点 + 半径)
- OR 过滤器(使用 $or)
- MongoId 转换器
- MongoDate 转换器
安装
使用 composer 在您的项目中包含库
$ composer require kalmanolah/php-query-filters
使用
过滤 Doctrine ORM QueryBuilder 查询
use KalmanOlah\QueryFilter\FilterSet; use KalmanOlah\QueryFilter\Transformer as Transformer; use KalmanOlah\QueryFilter\Doctrine\ORM\Filter as DoctrineORMFilter; use KalmanOlah\QueryFilter\Doctrine\ORM\Transformer as DoctrineORMTransformer; // Initialize the filter set $filterSet = (new FilterSet()) // Register filters ->registerFilter(new DoctrineORMFilter\EqualsFilter()) ->registerFilter(new DoctrineORMFilter\NotEqualsFilter()) ->registerFilter(new DoctrineORMFilter\LikeFilter()) ->registerFilter(new DoctrineORMFilter\FalseFilter()) ->registerFilter(new DoctrineORMFilter\TrueFilter()) ->registerFilter(new DoctrineORMFilter\GreaterThanFilter()) ->registerFilter(new DoctrineORMFilter\GreaterThanOrEqualToFilter()) ->registerFilter(new DoctrineORMFilter\LessThanFilter()) ->registerFilter(new DoctrineORMFilter\LessThanOrEqualToFilter()) ->registerFilter(new DoctrineORMFilter\NullFilter()) ->registerFilter(new DoctrineORMFilter\NotNullFilter()) ->registerFilter(new DoctrineORMFilter\OrFilter()) // Register transformers ->registerTransformer(new Transformer\FloatTransformer()) ->registerTransformer(new Transformer\IntegerTransformer()) ->registerTransformer(new DoctrineORMTransformer\DateTimeTransformer()); // Create a query $qb = $entityManager->createQueryBuilder() ->select('u') ->from('MyLibrary:User', 'u'); // Get some filters from somewhere (generally your REST API GET params) // eg: GET /api/users?filter[]=foo,bar&filter[]=bar,baz $filters = [ '*,or 1,2,3', // Wrap filters with index 1, 2 and 3 in OR statement 'profile.firstName,eq John', // LEFT JOIN u.profile p, WHERE p.firstName = 'John' 'username,like adm', // WHERE u.username LIKE '%adm%' 'enabled,true', // WHERE u.enabled = TRUE 'lastLogin,gte:dt 2015-03-03', // WHERE u.lastLogin >= '2016-03-03 00:00:00' 'karma,lt:f 3.6', // WHERE u.karma < 3.6 ]; // Apply filters to the query $filterSet->applyQueryFilters($qb, $filters); // Get the query result as you normally would $result = $qb->getQuery()->getResult();
过滤 MongoDB 数组查询
use KalmanOlah\QueryFilter\FilterSet; use KalmanOlah\QueryFilter\Transformer as Transformer; use KalmanOlah\QueryFilter\MongoDB\Filter as MongoDBFilter; use KalmanOlah\QueryFilter\MongoDB\Transformer as MongoDBTransformer; // Initialize the filter set $filterSet = (new FilterSet()) // Register filters ->registerFilter(new MongoDBFilter\EqualsFilter()) ->registerFilter(new MongoDBFilter\NotEqualsFilter()) ->registerFilter(new MongoDBFilter\LikeFilter()) ->registerFilter(new MongoDBFilter\FalseFilter()) ->registerFilter(new MongoDBFilter\TrueFilter()) ->registerFilter(new MongoDBFilter\GreaterThanFilter()) ->registerFilter(new MongoDBFilter\GreaterThanOrEqualToFilter()) ->registerFilter(new MongoDBFilter\LessThanFilter()) ->registerFilter(new MongoDBFilter\LessThanOrEqualToFilter()) ->registerFilter(new MongoDBFilter\NullFilter()) ->registerFilter(new MongoDBFilter\NotNullFilter()) ->registerFilter(new MongoDBFilter\GeoNearFilter()) ->registerFilter(new MongoDBFilter\OrFilter()) // Register transformers ->registerTransformer(new Transformer\FloatTransformer()) ->registerTransformer(new Transformer\IntegerTransformer()) ->registerTransformer(new MongoDBTransformer\MongoIdTransformer()) ->registerTransformer(new MongoDBTransformer\MongoDateTransformer()); // Create a query (Note: the $and key is currently required) $query = [ '$and' => [], ]; // Get some filters from somewhere (generally your REST API GET params) // eg: GET /api/users?filter[]=foo,bar&filter[]=bar,baz $filters = [ '*,or 1,2,3', // Wrap filters with index 1, 2 and 3 in OR statement 'profile.firstName,eq John', // ['profile.firstName' => ['$eq' => 'John']] 'username,like adm', // ['username' => ['$regex' => /adm/i]] 'enabled,true', // ['enabled' => ['$eq' => true]] 'lastLogin,gte:dt 2015-03-03', // ['lastLogin' => ['$gte' => ISODate('2015-03-03T00:00:00Z')]] 'id,ne:id 123412341234123412341234', // ['id' => ['$ne' => ObjectId('123412341234')]] 'karma,lt:f 3.6', // ['karma' => ['$lt' => 3.6]] 'location,geo_near 4.4500,51.1333,300', // ['location' => ['$near' => ...]] ]; // Apply filters to the query $filterSet->applyQueryFilters($query, $filters); // Get the query result as you normally would $mongo = new MongoDB\Client("mongodb://:27017"); $result = $mongo->mydb->user->find($query);
测试
在运行 composer install 后运行测试
$ ./scripts/run_tests
许可
见 LICENSE