Doctrine Collections Integration
High-level integration with Doctrine Collections is provided by our
rekalogika/collections-* packages. Read more about them in the
rekalogika/collections documentation. This document focuses on
how this high-level integration can improve your workflow.
Transforms a Collection into a Collection + Pageable
Use the RecollectionDecorator class to add PageableInterface functionality
to a Doctrine Collection.
use Doctrine\Common\Collections\Collection;
use Rekalogika\Contracts\Collections\Recollection;
use Rekalogika\Domain\Collections\RecollectionDecorator;
/** @var Collection $someCollection */
$improvedCollection = RecollectionDecorator::create($someCollection);
In the example above, $improvedCollection is now a Recollection object which
is still a Collection but also a PageableInterface at the same time.
A Better ->matching()
Rather than doing this:
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\Criteria;
/** @var Collection $collection */
$criteria = Criteria::create()->where(...);
$filteredCollection = $collection->matching($criteria);
You can do this:
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\Criteria;
use Rekalogika\Domain\Collections\CriteriaRecollection;
/** @var Collection $collection */
$criteria = Criteria::create()->where(...);
$filteredCollection = CriteriaRecollection::create($collection, $criteria);
The upside of the latter is that the result is lazy-loaded and implements both
ReadableCollection and PageableInterface.
Transforms a QueryBuilder into a Collection + Pageable
use Rekalogika\Collections\ORM\QueryRecollection;
$queryBuilder = ... // create a QueryBuilder instance
$collection = new QueryRecollection(
queryBuilder: $queryBuilder,
indexBy: 'id'
);
In the example above, $collection is now a Recollection object which is a
Collection and a PageableInterface at the same time.
There are More
Our rekalogika/collections-* packages are more than just about
PageableInterface. Check out the rekalogika/collections
documentation for more information.