bitecodes / doctrine-filter

此包已 废弃,不再维护。未建议替代包。

Doctrine ORM 的简单过滤器

v1.0.3 2018-08-02 13:12 UTC

This package is not auto-updated.

Last update: 2022-08-01 07:28:44 UTC


README

Build Status Coverage Status

安装

composer require bitecodes/doctrine-filter

使用方法

如果您想使用过滤器,创建一个新的类并实现 FilterInterface

use BiteCodes\DoctrineFilter\FilterBuilder;
use BiteCodes\DoctrineFilter\FilterInterface;

class MyFilter implements FilterInterface
{
    public function buildFilter(FilterBuilder $builder)
    {
        // ...
    }
}

现在您可以通过调用 $builder->add($name, $type) 开始定义您的过滤器。

public function buildFilter(FilterBuilder $builder)
{
    $builder
        ->add('category', EqualFilterType::class)
        ->add('price_max', LessThanEqualFilterType::class)
        ->orderBy('price', 'DESC);
}

名称是过滤器使用的键。所以如果您想按类别查询实体,您必须确保提供一个具有 category 键的数组。

您可以使用多种不同的过滤器类型。请查看下面的列表。

要在您的实体上使用过滤器,最简单的解决方案是创建一个自定义仓库并使用 EntityFilterTrait

use Doctrine\ORM\EntityRepository;
use BiteCodes\DoctrineFilter\Traits\EntityFilterTrait;

class MyRepository extends EntityRepository
{
    use EntityFilterTrait;
}

现在您可以通过调用新添加的 filter 方法来执行查询。

$result = $em->getRepository(MyEntity::class)->filter(new MyFilter(), [
	'category' => 2,
	'price_max' => 80
]);

此方法将返回所有类别为 2 且价格小于或等于 80 的实体。

结果排序

您还可以通过使用 orderBy 方法指定结果的顺序。第一个参数是过滤器的名称,第二个参数定义可能的默认排序。您可以传递 'ASC''DESC'。请注意,在设置默认值后,您无法向过滤器传递值。如果您需要能够通过搜索参数定义排序,请传递 null 作为第二个参数。

过滤器类型

BetweenFilterType

此过滤器可用于范围,并将公开两个您可以使用搜索键。

use BiteCodes\DoctrineFilter\Type\BetweenFilterType;

$builder
	->add('price', BetweenFilterType::class, [
		'lower_bound_suffix' => 'from',
		'upper_bound_suffix' => 'to',
	]);
	
//...

$em->getRepository(MyEntity::class)->filter(new MyFilter(), [
	'price_from' => 40,
	'price_to' => 80
]); 
选项 描述 默认值
lower_bound_suffix 下限的后缀 'since'
upper_bound_suffix 上限的后缀 'until'
include_lower_bound 是否包含下限? true
include_upper_bound 是否包含上限? true

ClosureFilterType

ComparableFilterType

EqualFilterType

使用此过滤器时,数据库值必须与搜索值相同。

GreaterThanEqualFilterType

数据库值必须大于或等于搜索值。

GreaterThanFilterType

数据库值必须大于搜索值。

InFilterType

数据库值必须包含在指定的搜索值中。

InstanceOfFilterType

如果您使用继承映射,可以使用此过滤器仅返回特定实体。搜索值必须等于DiscriminatorMap中定义的键。

LessThanEqualFilterType

数据库值必须小于或等于搜索值。

LessThanFilterType

数据库值必须小于搜索值。

LikeFilterType

将在给定的字段上执行like查询。

NotEqualFilterType

数据库值必须与搜索值不同。

NotInFilterType

数据库值不得包含在给定的搜索值中。

Todo

  • 选项
    • 大小写敏感
    • 默认值
  • Distinct
  • 多实体实例的InstanceOf