From e19fd756cbc5f57e696a91b8b3626747c70c0192 Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Wed, 19 Oct 2011 09:07:18 +0200 Subject: [PATCH 01/11] Better indentation for generated class --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 62efbac85..0792ceb91 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -406,7 +406,7 @@ public function () } if ($collections) { - return $this->_prefixCodeWithSpaces(str_replace("", implode("\n", $collections), self::$_constructorMethodTemplate)); + return $this->_prefixCodeWithSpaces(str_replace("", implode("\n".$this->_spaces, $collections), self::$_constructorMethodTemplate)); } return ''; From 9c1202a76667d8e778a29d008a54c4ad3bda9c2e Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Wed, 19 Oct 2011 09:15:41 +0200 Subject: [PATCH 02/11] Added on generated class. This allow to unset many-to-one and one-to-one relations Example: $user->setGroup(null); --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 0792ceb91..e8ae73aee 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -117,7 +117,7 @@ public function () * @param $ * @return */ -public function ($) +public function ($) { $this-> = $; return $this; @@ -634,7 +634,7 @@ public function () foreach ($metadata->associationMappings as $associationMapping) { if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) { - if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'])) { + if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], 'null')) { $methods[] = $code; } if ($code = $this->_generateEntityStubMethod($metadata, 'get', $associationMapping['fieldName'], $associationMapping['targetEntity'])) { @@ -707,7 +707,7 @@ public function () return implode("\n", $lines); } - private function _generateEntityStubMethod(ClassMetadataInfo $metadata, $type, $fieldName, $typeHint = null) + private function _generateEntityStubMethod(ClassMetadataInfo $metadata, $type, $fieldName, $typeHint = null, $defaultValue = null) { if ($type == "add") { $addMethod = explode("\\", $typeHint); @@ -737,6 +737,7 @@ public function () '' => Inflector::camelize($fieldName), '' => $methodName, '' => $fieldName, + '' => ($defaultValue!==null?('='.$defaultValue):''), '' => $this->_getClassName($metadata) ); From 8f092812c42dfae3f0c80f504c1766812bf59443 Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Wed, 19 Oct 2011 09:17:30 +0200 Subject: [PATCH 03/11] Spaces --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index e8ae73aee..f130908e7 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -737,7 +737,7 @@ public function () '' => Inflector::camelize($fieldName), '' => $methodName, '' => $fieldName, - '' => ($defaultValue!==null?('='.$defaultValue):''), + '' => ($defaultValue!==null?('='.$defaultValue):''), '' => $this->_getClassName($metadata) ); From be3adfb35ebb0c4139f8ee4cae7b88ff8c9cd5c9 Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Wed, 19 Oct 2011 09:25:40 +0200 Subject: [PATCH 04/11] With TO_MANY relations, class filed is instanceof ArrayCollection, instead of targetEntity class type. --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index f130908e7..a3a27892c 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -806,7 +806,12 @@ public function () { $lines = array(); $lines[] = $this->_spaces . '/**'; - $lines[] = $this->_spaces . ' * @var ' . $associationMapping['targetEntity']; + + if ($associationMapping['type'] & ClassMetadataInfo::TO_MANY) { + $lines[] = $this->_spaces . ' * @var \Doctrine\Common\Collections\ArrayCollection'; + }else{ + $lines[] = $this->_spaces . ' * @var ' . $associationMapping['targetEntity']; + } if ($this->_generateAnnotations) { $lines[] = $this->_spaces . ' *'; From 596ba3d5b1e32f685f77e116524c83621573edb8 Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Wed, 19 Oct 2011 15:04:16 +0200 Subject: [PATCH 05/11] Collection inteface instead of ArrayCollection --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index a3a27892c..7de6bdaea 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -808,7 +808,7 @@ public function () $lines[] = $this->_spaces . '/**'; if ($associationMapping['type'] & ClassMetadataInfo::TO_MANY) { - $lines[] = $this->_spaces . ' * @var \Doctrine\Common\Collections\ArrayCollection'; + $lines[] = $this->_spaces . ' * @var \Doctrine\Common\Collections\Collection'; }else{ $lines[] = $this->_spaces . ' * @var ' . $associationMapping['targetEntity']; } From fe84a61d0b24ecc9bb5ba323e56a2fb00eaf3263 Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Fri, 21 Oct 2011 09:38:37 +0200 Subject: [PATCH 06/11] Better code generation when association is nullable --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 23 ++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 7de6bdaea..bbde24346 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -634,7 +634,8 @@ public function () foreach ($metadata->associationMappings as $associationMapping) { if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) { - if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], 'null')) { + $nullable = $this->_associationIsNullable($associationMapping); + if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], ($nullable?'null':null))) { $methods[] = $code; } if ($code = $this->_generateEntityStubMethod($metadata, 'get', $associationMapping['fieldName'], $associationMapping['targetEntity'])) { @@ -653,6 +654,24 @@ public function () return implode("\n\n", $methods); } + private function _associationIsNullable($associationMapping) + { + if(isset($associationMapping['joinColumns'])){ + $joinColumns = $associationMapping['joinColumns']; + }else{ + //@todo thereis no way to retreive targetEntity metadata + //$targetMetadata = $this->getClassMetadata($associationMapping['targetEntity']); + //$joinColumns = $targetMetadata->associationMappings[$associationMapping["mappedBy"]]['joinColumns']; + $joinColumns = array(); + } + foreach ($joinColumns as $joinColumn) { + if(!isset($joinColumn['nullable']) || !$joinColumn['nullable']){ + return false; + } + } + return true; + } + private function _generateEntityLifecycleCallbackMethods(ClassMetadataInfo $metadata) { if (isset($metadata->lifecycleCallbacks) && $metadata->lifecycleCallbacks) { @@ -808,7 +827,7 @@ public function () $lines[] = $this->_spaces . '/**'; if ($associationMapping['type'] & ClassMetadataInfo::TO_MANY) { - $lines[] = $this->_spaces . ' * @var \Doctrine\Common\Collections\Collection'; + $lines[] = $this->_spaces . ' * @var \Doctrine\Common\Collections\ArrayCollection'; }else{ $lines[] = $this->_spaces . ' * @var ' . $associationMapping['targetEntity']; } From d4059b88ca8048d655015682262c3b9b9976b5a1 Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Fri, 21 Oct 2011 15:30:21 +0200 Subject: [PATCH 07/11] Nullable relations, fixing join condition --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index bbde24346..c135ecac4 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -634,7 +634,7 @@ public function () foreach ($metadata->associationMappings as $associationMapping) { if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) { - $nullable = $this->_associationIsNullable($associationMapping); + $nullable = $this->_isAssociationIsNullable($associationMapping); if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], ($nullable?'null':null))) { $methods[] = $code; } @@ -654,7 +654,7 @@ public function () return implode("\n\n", $methods); } - private function _associationIsNullable($associationMapping) + private function _isAssociationIsNullable($associationMapping) { if(isset($associationMapping['joinColumns'])){ $joinColumns = $associationMapping['joinColumns']; @@ -665,7 +665,7 @@ public function () $joinColumns = array(); } foreach ($joinColumns as $joinColumn) { - if(!isset($joinColumn['nullable']) || !$joinColumn['nullable']){ + if(isset($joinColumn['nullable']) && !$joinColumn['nullable']){ return false; } } From 5f80b575541d53489f651f9d50aa44db5bdb49df Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Mon, 24 Oct 2011 10:19:01 +0200 Subject: [PATCH 08/11] Improoved coding standards --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index c135ecac4..1542f6cf0 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -635,7 +635,7 @@ public function () foreach ($metadata->associationMappings as $associationMapping) { if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) { $nullable = $this->_isAssociationIsNullable($associationMapping); - if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], ($nullable?'null':null))) { + if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], ($nullable ? 'null' : null))) { $methods[] = $code; } if ($code = $this->_generateEntityStubMethod($metadata, 'get', $associationMapping['fieldName'], $associationMapping['targetEntity'])) { @@ -656,16 +656,14 @@ public function () private function _isAssociationIsNullable($associationMapping) { - if(isset($associationMapping['joinColumns'])){ + if (isset($associationMapping['joinColumns'])) { $joinColumns = $associationMapping['joinColumns']; - }else{ + } else { //@todo thereis no way to retreive targetEntity metadata - //$targetMetadata = $this->getClassMetadata($associationMapping['targetEntity']); - //$joinColumns = $targetMetadata->associationMappings[$associationMapping["mappedBy"]]['joinColumns']; $joinColumns = array(); } foreach ($joinColumns as $joinColumn) { - if(isset($joinColumn['nullable']) && !$joinColumn['nullable']){ + if(isset($joinColumn['nullable']) && !$joinColumn['nullable']) { return false; } } @@ -756,7 +754,7 @@ public function () '' => Inflector::camelize($fieldName), '' => $methodName, '' => $fieldName, - '' => ($defaultValue!==null?('='.$defaultValue):''), + '' => (($defaultValue !== null ) ? ('='.$defaultValue) : ''), '' => $this->_getClassName($metadata) ); @@ -825,10 +823,10 @@ public function () { $lines = array(); $lines[] = $this->_spaces . '/**'; - + if ($associationMapping['type'] & ClassMetadataInfo::TO_MANY) { $lines[] = $this->_spaces . ' * @var \Doctrine\Common\Collections\ArrayCollection'; - }else{ + } else { $lines[] = $this->_spaces . ' * @var ' . $associationMapping['targetEntity']; } From f5330741ac1bff9e015172e2ec9c2a3f019cd84b Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Mon, 24 Oct 2011 10:59:50 +0200 Subject: [PATCH 09/11] Coding standards --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 1542f6cf0..b7522380f 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -634,8 +634,8 @@ public function () foreach ($metadata->associationMappings as $associationMapping) { if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) { - $nullable = $this->_isAssociationIsNullable($associationMapping); - if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], ($nullable ? 'null' : null))) { + $nullable = $this->_isAssociationIsNullable($associationMapping) ? 'null' : null; + if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], $nullable)) { $methods[] = $code; } if ($code = $this->_generateEntityStubMethod($metadata, 'get', $associationMapping['fieldName'], $associationMapping['targetEntity'])) { From 7efd615b8c6d6658b05740c923170ef8a24dbba7 Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Mon, 24 Oct 2011 12:00:11 +0200 Subject: [PATCH 10/11] Coding standards --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 1542f6cf0..b1ba714d8 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -634,8 +634,8 @@ public function () foreach ($metadata->associationMappings as $associationMapping) { if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) { - $nullable = $this->_isAssociationIsNullable($associationMapping); - if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], ($nullable ? 'null' : null))) { + $nullable = $this->_isAssociationIsNullable($associationMapping) ? 'null' : null; + if ($code = $this->_generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], $nullable)) { $methods[] = $code; } if ($code = $this->_generateEntityStubMethod($metadata, 'get', $associationMapping['fieldName'], $associationMapping['targetEntity'])) { @@ -754,7 +754,7 @@ public function () '' => Inflector::camelize($fieldName), '' => $methodName, '' => $fieldName, - '' => (($defaultValue !== null ) ? ('='.$defaultValue) : ''), + '' => ($defaultValue !== null ) ? ('='.$defaultValue) : '', '' => $this->_getClassName($metadata) ); From 0a5a23628f74f3203d2e659939b4aee39fa4c462 Mon Sep 17 00:00:00 2001 From: Lukas Kahwe Smith Date: Tue, 25 Oct 2011 23:21:39 +0200 Subject: [PATCH 11/11] added EntityRepository::getClassName() to fullfill the ObjectRepository interface see https://github.com/doctrine/common/pull/70 --- lib/Doctrine/ORM/EntityRepository.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index 9760a1c42..a4c239001 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -225,6 +225,14 @@ class EntityRepository implements ObjectRepository return $this->_entityName; } + /** + * @return string + */ + public function getClassName() + { + return $this->getEntityName(); + } + /** * @return EntityManager */ @@ -240,4 +248,4 @@ class EntityRepository implements ObjectRepository { return $this->_class; } -} \ No newline at end of file +}