apply dynamic filters using laravel doctrine
kiqcavalcanti/laravel-doctrine-filtering is a Laravel package for apply dynamic filters using laravel doctrine.
It currently has 3 GitHub stars and 1.919 downloads on Packagist (latest version v1.0.0).
Install it with composer require kiqcavalcanti/laravel-doctrine-filtering.
Discover more Laravel packages by kiqcavalcanti
or browse all Laravel packages to compare alternatives.
Last updated
Apply dynamic query filters using laravel-doctrine
example:
$qb =
$this->_em
->createQueryBuilder()
->select($this->getEntityName()::getEntityAlias())
->from($this->getEntityName(), $this->getEntityName()::getEntityAlias(), $indexBy);
$this->applyLaravelDoctrineFilters($qb, $filters);
example1:
url = http://localhost/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'
example2:
url = http://localhost/advertisements?filter[id]=1,2
query =
SELECT advertisement
FROM Entities\Advertisement advertisement
WHERE advertisement.id IN (1, 2)
example3:
url = http://localhost/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'
example 4:
url = http://localhost/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%'
In your entity add a static attribute $joins with this structure:
protected static $entityJoins [
'customer_product' => ['entity' => CustomerProduct::class, 'condition' => 'advertisement.customerProductId = customer_product.id'],
'site' => ['entity' => Site::class, 'condition' => 'advertisement.siteId = site.id']
];
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;