pagerfanta/doctrine-mongodb-odm-adapter
Doctrine MongoDB ODM adapter for Pagerfanta. Adds pagination support for ODM query builders and queries, returning paginated results with limits, offsets, and total counts—ideal for building pageable lists in Laravel, Symfony, or custom PHP apps.
getCurrentPage(), setMaxPerPage()).pagerfanta/pagerfanta) and Doctrine MongoDB ODM (doctrine/mongodb-odm).Illuminate\Pagination) is already in use for MongoDB.maxPerPage values).hydrate() or select() in ODM queries.HttpTests) may require custom assertions.jenssegers/laravel-mongodb) is sufficient.limit()/skip() optimizations.Illuminate\Pagination unless abstracted via a service layer.spatie/laravel-pagination).composer require pagerfanta/pagerfanta babdev/pagerfanta-doctrine-mongodb-odm-adapter
// app/Providers/AppServiceProvider.php
use Pagerfanta\Pagerfanta;
use BabDev\Pagerfanta\Doctrine\MongoDB\ODM\Adapter;
public function register()
{
$this->app->bind(Pagerfanta::class, function ($app) {
$dm = $app->make('doctrine_mongodb.odm.document_manager');
$adapter = new Adapter($dm->getRepository('YourDocument'));
return new Pagerfanta($adapter);
});
}
use Pagerfanta\Pagerfanta;
public function index(Pagerfanta $pagerfanta)
{
$pagerfanta->setMaxPerPage(20);
$pagerfanta->setCurrentPage($_GET['page'] ?? 1);
return view('paginated', ['pagerfanta' => $pagerfanta]);
}
v3.10).mongodb/mongodb driver (ODM dependency).findBy(), createQueryBuilder()).Pagerfanta\Cache\Adapter) for high-traffic endpoints.dd($pagerfanta->getAdapter()) to inspect queries.$dm->getRepository()->createQueryBuilder()->getQuery()->getQueryPlan().{$sort: {createdAt: -1}}).select()) to limit returned fields.skip()) becomes slow for large offsets (>10k). Use cursor-based instead.maxPerPage values.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Package abandonment | Broken functionality | Fork and maintain locally |
| MongoDB connection issues | Pagination fails | Retry logic + circuit breaker |
| Unindexed paginated fields | Slow queries | Add indexes; use explain() to diagnose |
| Pagerfanta version conflict | Runtime errors | Pin versions in composer.json |
Large maxPerPage memory leaks |
Server crashes | Cap at 50–100 items; use streaming |
How can I help you explore Laravel packages today?