/**
  * @{inheritDoc}
  */
 public function sortBy($comparator)
 {
     Contracts::ensureCallable($comparator);
     if (!(is_object($comparator) && $comparator instanceof EntityComparator)) {
         return parent::sortBy($comparator);
     }
     return $this->sortQbBy(array($comparator, 'updateQb'), $comparator);
 }
Example #2
0
 /**
  * {@inheritDoc}
  */
 public function flatMapBy($mapper)
 {
     Contracts::ensureCallable($mapper);
     return $this->mapPairsBy($mapper, 'flatMapBy');
 }
 /**
  * {@inheritDoc}
  */
 public function groupBy($keyFinder, $uniqueKeys = false)
 {
     Contracts::ensureCallable($keyFinder);
     if (!$uniqueKeys) {
         return $this->foldBy(function ($multimapBuilder, $element) use($keyFinder) {
             return $multimapBuilder->add(call_user_func($keyFinder, $element), $element);
         }, static::createMultimapBuilder())->build();
     } else {
         return $this->foldBy(function ($mapBuilder, $element) use($keyFinder) {
             return $mapBuilder->put(call_user_func($keyFinder, $element), $element);
         }, static::createMapBuilder())->build();
     }
 }
 /**
  * @param callback $qbFolder
  * @param callback $nativeFolder
  * @param mixed    $accumulator For native filter.
  *
  * @return mixed
  */
 protected function foldQbBy($qbFolder, $nativeFolder, $accumulator)
 {
     Contracts::ensureCallable($qbFolder, $nativeFolder);
     if ($this->queryBuilder) {
         $queryBuilder = clone $this->queryBuilder;
         $alias = $queryBuilder->getRootAliases();
         $alias = $alias[0];
         // TODO Do ->getQuery()->getOneOrNullResult() here?
         call_user_func($qbFolder, $queryBuilder, $alias);
         return $queryBuilder->getQuery()->getOneOrNullResult();
     } else {
         return $this->foldBy($nativeFolder, $accumulator);
     }
 }