private function checkRecursion(MetaClassProperty $property, MetaClass $holder, $paths = array()) { Assert::isTrue($property->getRelationId() == MetaRelation::ONE_TO_ONE); if ($property->getFetchStrategy() && $property->getFetchStrategy()->getId() != FetchStrategy::JOIN) { return false; } $remote = $property->getType()->getClass(); if (isset($paths[$holder->getName()][$remote->getName()])) { return true; } else { $paths[$holder->getName()][$remote->getName()] = true; foreach ($remote->getProperties() as $remoteProperty) { if ($remoteProperty->getRelationId() == MetaRelation::ONE_TO_ONE) { if ($this->checkRecursion($remoteProperty, $holder, $paths)) { $remoteProperty->setFetchStrategy(FetchStrategy::cascade()); } } } } return false; }