biera / filter
v1.1.0
2022-05-30 17:08 UTC
Requires
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-08-29 05:37:34 UTC
README
此包包含一个小型库,旨在简化每个Web应用项目的过滤问题:过滤。它不依赖于存储(检查可用的 绑定)并附带一个微语言,有助于构建“过滤表达式”。
{
"and": [
{
"lte": {"releaseDate": "2000-12-31"}
},
{
"in": {"genre": ["biography", "drama"]}
}
]
}
它应该是相当直观的(如果不是,它读取 XX世纪所有戏剧和传记电影)。
用法
可以使用 Biera\Filter\Operator
直接构建过滤表达式,它为所有支持的运算符提供了构造方法
use Biera\Filter\Operator; // all drama and biography movies released in XX century $filterExpression = Operator::and( [ Operator::lte('releaseDate', new DateTimeImmutable('2000-12-31')), Operator::in('genre', ['bigraphy', 'drama']) ] ); assert($filterExpression instanceof Operator);
对于更复杂的表达式,可以使用具有流畅API的 Biera\Filter\FilterExpressionBuilder
作为更好的选择
use Biera\Filter\Operator; use Biera\Filter\FilterExpressionBuilder; // all biography movies which are released before 2001-01-01 or last at least 120 minutes $filterExpression = FilterExpressionBuilder::create() ->and() ->eq('genre', 'biography') ->or() ->lt('releaseDate', new DateTimeImmutable('2001-01-01')) ->gte('duration', 120) ->end() ->end() ->build(); assert($filterExpression instanceof Operator);
然而,通常情况下,过滤表达式由客户端应用程序作为JSON编码字符串提供,在这种情况下使用 Biera\Filter\FilterExpressionFactory
use Biera\Filter\Operator; use Biera\Filter\FilterExpressionFactory; $filterExpression = FilterExpressionFactory::createFromJson($_GET['filters']); assert($filterExpression instanceof Operator);
好吧,你有了过滤表达式。接下来是什么?
通常,这个库会与现有的 绑定 之一一起使用。为了演示目的,让我们使用 doctrine ORM 绑定来看看它是如何工作的
use Doctrine\ORM\EntityRepository; use Biera\Filter\Operator as FilterExpression; use Biera\Filter\Binding\Doctrine\ORM\WhereClauseFactory; class MovieRepository extends EntityRepository { public function findAllByFilters(FilterExpression $filters): array { $whereClause = WhereClauseFactory::createFromFilterExpression($filters); return $this->createQueryBuilder('movie') ->where($whereClause) ->getQuery() ->getResult(); } }
如你所见,它只是帮助处理where子句。连接、分组和可能的排序工作仍然必须由你完成。
安装
此库作为composer包分发,可以通过输入以下命令安装:
composer require biera/filter
然而,没有特定的绑定,它几乎毫无用处,因此考虑使用特定的绑定(它依赖于 biera/filter
包)。
绑定
- PDO
- doctrine ORM
- mongo(正在进行中)