obviux / criteria
此包已被废弃,不再维护。没有建议的替代包。
创建无差别的过滤条件
1.1.1
2019-10-07 09:09 UTC
Requires
- ext-mongodb: *
- mongodb/mongodb: ^1.1.2
- nesbot/carbon: >=1.15.0
Requires (Dev)
- phpunit/phpunit: ^7.5
This package is not auto-updated.
Last update: 2021-11-14 16:32:52 UTC
README
使用此库创建无差别的查询过滤器。这允许业务代码与底层数据集之间松耦合。
安装
您可以通过composer安装此包
composer require obviux/critera
基本条件创建
创建一个基本过滤器,用于查找名称属性等于匿名元素
$criteria = Criteria::where()->name->eq('May B. Wright');
创建具有多个要求的过滤器
$criteria = Criteria::where()->name->eq('Justin Case') ->and->age->gte(20) ->and->age->lt(30) ;
此过滤器将匹配任何条件
$criteria = Criteria::where()->shape->eq('square') ->or->color->eq('red') ->or->size('medium') ;
匹配多个值列表中的任意一个或全部。该列表可以是多个参数或数组提供
$criteria = Criteria::where()->rank->in(1, 2, 3); $criteria = Criteria::where()->rank->nin([1, 2, 3);
需要嵌套以混合和/或条件
$criteria = Criteria::where(Criteria::where()->created->gte('2017-01-01')->and->created->lt('2018-01-01')) ->or(Criteria::where()->created->gte('2015-01-01')->and->created->lt('2016-01-01')) ;
如果其中一个元素是单个条件,则可以跳过初始条件
$criteria = Criteria::where()->created->gte('2019-01-01') ->or(Criteria::where()->color->ne('white')->and->size->in('small', 'medium')) ;
条件转换
使用转换器生成特定格式的条件输出。例如,使用Mongo转换器生成MongoDB\Collection::find()的查询过滤器
use Criteria\Criteria; use Criteria\Transformers\Mongo; $criteria = Criteria::where()->type->eq('desktop') ->and->bit->eq(64) ->and(Criteria::where(Criteria::where()->OS->eq('ubuntu')->and->version->gte("18.04")) ->or(Criteria::where(Criteria::where()->OS->eq('fedora')->and->version->gte(30))) )->and->release_date->gte(Carbon::parse('2019-01-01', 'UTC')) ; echo json_encode($criteria->transform(new Mongo()), JSON_PRETTY_PRINT);
上述示例将输出
{ "$and": [ { "type": { "$eq": "desktop" } }, { "bit": { "$eq": 64 } }, { "$or": [ { "$and": [ { "OS": { "$eq": "ubuntu" } }, { "version": { "$gte": "18.04" } } ] }, { "$and": [ { "OS": { "$eq": "fedora" } }, { "version": { "$gte": 30 } } ] } ] }, { "release_date": { "$gte": { "$date": { "$numberLong": "1546300800000" } } } } ] }
贡献
欢迎拉取请求。对于重大更改,请先打开一个问题以讨论您想要更改的内容。
请确保适当更新测试。