/** * Will perform multiple sub-searches. * Results from first search will be transformed and passed as CriteriaCollection * to another sub-search. * Whole process will return collection of results from each sub-search. * * @param CriteriaCollectionInterface $criteriaCollection * * @return ResultCollection */ public function search(CriteriaCollectionInterface $criteriaCollection) { $previousCriteria = $criteriaCollection; $previousResults = null; $result = new ResultCollection(); /** @var CellInterface $cell */ foreach ($this->cellCollection as $name => $cell) { if ($cell->getTransformer()->skip($previousResults)) { continue; } $previousResults = $cell->getSearcher()->search($previousCriteria); $previousCriteria = $this->getNewCriteria($cell, $previousCriteria, $previousResults); $result->addNamedItem($name, $previousResults); } return $result; }