kiqcavalcanti / laravel-doctrine-filtering
使用 Laravel Doctrine 应用动态过滤器
v1.0.0
2019-12-03 14:51 UTC
Requires
- php: ^7.1.3
- doctrine/collections: ^1.6
- laravel-doctrine/orm: ~1.4
This package is auto-updated.
Last update: 2024-09-29 05:55:24 UTC
README
使用 Laravel Doctrine 应用动态查询过滤器
如何使用
- 在你的实体类中扩展 FilterEntity
- 在你的验证器中,可以使用 isValidFilter 规则来验证 URL 参数过滤器
- 在你的存储库中扩展 DoctrineFilterRepository 并使用 applyFilters 方法,传递查询构建器和 URL 参数过滤器作为参数。
示例
$qb =
$this->_em
->createQueryBuilder()
->select($this->getEntityName()::getEntityAlias())
->from($this->getEntityName(), $this->getEntityName()::getEntityAlias(), $indexBy);
$this->applyLaravelDoctrineFilters($qb, $filters);
示例
示例1
url = https:///advertisements?filter[created_at]=2018-07-22T18:48:16-03:00
query =
SELECT advertisement
FROM Entities\Advertisement advertisement
WHERE advertisement.createdAt = '2018-07-22 18:48:16'
示例2
url = https:///advertisements?filter[id]=1,2
query =
SELECT advertisement
FROM Entities\Advertisement advertisement
WHERE advertisement.id IN (1, 2)
示例3
url = https:///advertisements?filter[created_at|between]=2018-07-22T18:48:16-03:00,2018-07-22T18:48:16-03:00
query =
SELECT advertisement
FROM Entities\Advertisement advertisement
WHERE advertisement.createdAt BETWEEN '2018-07-22 18:48:16' AND '2018-07-22 18:48:16'
示例 4
url = https:///advertisements?filter[customer_product][customer][name|like]=cor
query =
SELECT advertisement
FROM Entities\Advertisement advertisement
INNER JOIN Entities\CustomerProduct customer_product
WITH advertisement.customerProductId = customer_product.id
INNER JOIN Entities\Customer customer
WITH customer_product.customerId = customer.id
WHERE LOWER(customer.name) LIKE '%cor%'
配置带连接的过滤器
在你的实体中添加一个静态属性 $joins,其结构如下
protected static $entityJoins [
'customer_product' => ['entity' => CustomerProduct::class, 'condition' => 'advertisement.customerProductId = customer_product.id'],
'site' => ['entity' => Site::class, 'condition' => 'advertisement.siteId = site.id']
];
OperatorEnum / 可用操作符
case 'eq':
case '=':
return OperatorEnum::EQ;
case 'neq':
case '!=':
case '<>':
return OperatorEnum::NEQ;
case 'gt':
case '>':
return OperatorEnum::GT;
case 'gte':
case '>=':
return OperatorEnum::GTE;
case 'lt':
case '<':
return OperatorEnum::LT;
case 'lte':
case '<=':
return OperatorEnum::LTE;
case 'between':
return OperatorEnum::BETWEEN;
case 'like':
return OperatorEnum::LIKE;
case 'in':
return OperatorEnum::IN;
case 'notin':
return OperatorEnum::NOTIN;
case 'isnull':
return OperatorEnum::ISNULL;
case 'isnotnull':
return OperatorEnum::ISNOTNULL;