lune/osmosis

一个过滤API

v0.0.1 2017-01-15 12:48 UTC

This package is auto-updated.

Last update: 2024-09-24 20:53:27 UTC


README

一个用于过滤数据的流畅接口。

安装

安装Osmosis推荐使用 Composer

composer require lune/osmosis

操作符

以下操作符可用

equals

inArray

greaterThan

greaterThanOrEqual

lessThan

lessThanOrEqual

not

notInArray

数据源

以下数据源已包含

ArrayDataSource

包装数组并过滤

$filter = new Lune\Osmosis\Filter()
$filter
    ->equals('a', 1)
    ->greaterThan('b', 100);

$array = [
    ['a'=>1, 'b'=>20],
    ['a'=>1, 'b'=>120],
    ['a'=>3, 'b'=>120]        
];

//Convert our array to a DataSourceInterface object
$source = new Lune\Osmosis\DataSource\ArrayDataSource($array);

//Apply the filter to our datasource
$result = $filter->apply($source);

print_r((array) $result);
//[['a'=>1, 'b'=>'120']];

SQLDataSource

创建部分SQL

$filter = new Lune\Osmosis\Filter()
$filter->equals('ID', 1);

$source = new Lune\Osmosis\DataSource\SQLDataSource();
$result = $filter->apply($source);

//Execution example
$pdo = new \PDO(...);
$statement = $pdo->prepare("SELECT * FROM `users` WHERE {$result}");
$statement->execute($result->getVariables())->fetchAll();

请注意 Osmosis绝不是一个完整的查询构建器,也不旨在成为。

定义过滤器

要添加过滤器,请简单使用提供的方法

$filter = new Lune\Osmosis\Filter()
$filter
    ->equals('a', 1)
    ->greaterThan('b', 100);

您也可以将可调用的函数作为构造函数参数使用

$filter = new Lune\Osmosis\Filter(function(FilterInterface $f){
        $f->equals('a', 1)->greaterThan('b', 100);
});