public function toSetter(MetaClass $class, MetaClassProperty $property, MetaClassProperty $holder = null) { if ($property->getRelationId() == MetaRelation::ONE_TO_MANY || $property->getRelationId() == MetaRelation::MANY_TO_MANY) { // we don't need setter in such cases return null; } $name = $property->getName(); $methodName = 'set' . ucfirst($name); if ($holder) { return <<<EOT /** * @return {$holder->getClass()->getName()} **/ public function {$methodName}({$property->getType()->getClassName()} \${$name}) { \t\$this->{$holder->getName()}->{$methodName}(\${$name}); \t \treturn \$this; } EOT; } else { $defaultValue = $property->isOptional() ? ' = null' : ''; if ($property->getFetchStrategyId() == FetchStrategy::LAZY) { $method = <<<EOT /** * @return {$property->getClass()->getName()} **/ public function {$methodName}({$this->className} \${$name}{$defaultValue}) { \t\$this->{$name} = \${$name}; \t\$this->{$name}Id = \${$name} ? \${$name}->getId() : null; \treturn \$this; } /** * @return {$property->getClass()->getName()} **/ public function {$methodName}Id(\$id{$defaultValue}) { \t\$this->{$name} = null; \t\$this->{$name}Id = \$id; \treturn \$this; } EOT; } else { $method = <<<EOT /** * @return {$property->getClass()->getName()} **/ public function {$methodName}({$this->className} \${$name}{$defaultValue}) { \t\$this->{$name} = \${$name}; \treturn \$this; } EOT; } } return $method; }