cethyworks/doctrine-paginator-decorator
Doctrine\ORM\QueryBuilder with getResult() + manual pagination or Doctrine\ORM\Tools\Pagination\Paginator (deprecated in favor of Doctrine\ORM\Query\Expr\Pagination). This package may introduce legacy patterns that conflict with current best practices.Doctrine\ORM\Tools\Pagination\Paginator (unlikely in new Laravel projects). Modern alternatives exist (e.g., Knp\Paginator, Laravel Scout, or native QueryBuilder pagination).Paginator class, integration is trivial (composer install + decorator instantiation).Illuminate\Pagination\LengthAwarePaginator).| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| Deprecated Dependencies | High | Isolate usage to a single service; avoid in new features. |
| Lack of Maintenance | Critical | Fork and modernize if critical; otherwise, replace with KnpPaginator or native solutions. |
| Performance Overhead | Medium | Benchmark against QueryBuilder::setFirstResult()/setMaxResults(). |
| Laravel Ecosystem Gap | High | No Blade/route integration; manual pagination UI handling required. |
Doctrine\ORM\Tools\Pagination\Paginator for legacy reasons?KnpPaginator lacks?Illuminate\Pagination\AbstractPaginator need to be manually constructed from this decorator’s output?Doctrine\ORM\Tools\Pagination\Paginator (deprecated since Doctrine 2.5).LengthAwarePaginator, SimplePaginator).QueryBuilder::setFirstResult()/setMaxResults() or Doctrine\ORM\Query\Expr\Pagination.Knp\Paginator (Doctrine-aware) or Laravel Scout for search pagination.Doctrine\ORM\Tools\Pagination\Paginator.hasNextPage(), getCount(), etc.).class DoctrinePaginatorAdapter implements PaginatorInterface {
public function __construct(private DoctrinePaginatorDecorator $decorator) {}
public function toLaravelPaginator(): LengthAwarePaginator {
return new LengthAwarePaginator(
$this->decorator->getList(),
$this->decorator->getCount(),
$this->decorator->getLimit(),
$this->decorator->getPage()
);
}
}
KnpPaginator or native QueryBuilder pagination.KnpPaginator or native solutions.getCount() (via COUNT query) is optimized for large datasets.getCount() likely runs a separate COUNT(*) query, doubling DB hits for paginated endpoints.| Scenario | Impact | Mitigation |
|---|---|---|
| Doctrine ORM update breaks compatibility | Critical (package may fail silently) | Isolate usage; monitor CI failures. |
| Empty result set edge cases | Potential NullPointerException |
Add null checks in wrapper service. |
| PHP 8.1+ strict typing issues | Runtime errors | Test with PHP 8.1+ early. |
| Race conditions in multi-threaded apps | Unpredictable pagination | Use Doctrine connection pooling wisely. |
Doctrine\ORM\Tools\Pagination\Paginator).How can I help you explore Laravel packages today?