public static function getContainerClassOfMetaProperty(MetaClassProperty $property, $addBackslash = false) { if (!$property->getType() instanceof ObjectType || is_null($property->getRelationId())) { throw new WrongArgumentException(); } $className = ($addBackslash ? '\\' : '') . $property->getClass()->getDaoNamespace() . '\\' . $property->getClass()->getName() . ucfirst($property->getName()) . 'DAO'; return $className; }
private function checkRecursion(MetaClassProperty $property, MetaClass $holder, $paths = []) { 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; }
public function toDropper(MetaClass $class, MetaClassProperty $property, MetaClassProperty $holder = null) { if ($property->getRelationId() == MetaRelation::ONE_TO_MANY || $property->getRelationId() == MetaRelation::MANY_TO_MANY) { // we don't need dropper in such cases return null; } $name = $property->getName(); $methodName = 'drop' . ucfirst($name); if ($holder) { $method = <<<EOT /** * @return {$holder->getClass()->getName()} **/ public function {$methodName}() { \t\$this->{$holder->getName()}->{$methodName}(); \treturn \$this; } EOT; } else { if ($property->getFetchStrategyId() == FetchStrategy::LAZY) { $method = <<<EOT /** * @return {$class->getName()} **/ public function {$methodName}() { \t\$this->{$name} = null; \t\$this->{$name}Id = null; \treturn \$this; } EOT; } else { $method = <<<EOT /** * @return {$class->getName()} **/ public function {$methodName}() { \t\$this->{$name} = null; \treturn \$this; } EOT; } } return $method; }