obviux/criteria

此包已被废弃,不再维护。没有建议的替代包。

创建无差别的过滤条件

1.1.1 2019-10-07 09:09 UTC

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"
                    }
                }
            }
        }
    ]
}

贡献

欢迎拉取请求。对于重大更改,请先打开一个问题以讨论您想要更改的内容。

请确保适当更新测试。

许可

MIT