bitecodes / doctrine-filter
此包已 废弃,不再维护。未建议替代包。
Doctrine ORM 的简单过滤器
v1.0.3
2018-08-02 13:12 UTC
Requires
- doctrine/orm: >=2.4.5
- pagerfanta/pagerfanta: ^1.0
- symfony/options-resolver: ^2.7|^3.0|^4.0
Requires (Dev)
- doctrine/data-fixtures: ^1.0
- phpunit/phpunit: ^4.8
- satooshi/php-coveralls: ^1.0
README
安装
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