|
|
@@ -61,33 +61,27 @@ class SchemaSnippetsMaker
|
|
|
|
|
|
$methods = [];
|
|
|
|
|
|
- if (is_array($differences)) {
|
|
|
- foreach ($differences as $field => $difference) {
|
|
|
- if (!is_array($difference->getExpectedType()))
|
|
|
- {
|
|
|
- $prop = $this->makeSnippetEntitySimpleProp($field, $difference->getExpectedType());
|
|
|
- $methods[] = $this->makeSnippetGetterForProp($prop);
|
|
|
- $methods[] = $this->makeSnippetSetterForProp($prop);
|
|
|
-
|
|
|
- } else {
|
|
|
- $prop = $this->makeSnippetEntityCollectionProp($field, $difference->getExpectedType());
|
|
|
- $methods[] = $this->makeSnippetGetterForProp($prop);
|
|
|
-
|
|
|
- if (
|
|
|
- isset($difference->getExpectedType()['type']) &&
|
|
|
- in_array($difference->getExpectedType()['type'], [ClassMetadataInfo::ONE_TO_MANY, ClassMetadataInfo::MANY_TO_MANY])
|
|
|
- ) {
|
|
|
- $methods[] = $this->makeSnippetAdderForCollection($prop);
|
|
|
- $methods[] = $this->makeSnippetRemoverForCollection($prop);
|
|
|
- } else {
|
|
|
- $methods[] = $this->makeSnippetSetterForProp($prop);
|
|
|
- }
|
|
|
- }
|
|
|
- $class->addMember($prop);
|
|
|
+ $expectedFields = [];
|
|
|
+ if (!is_array($differences)) {
|
|
|
+ // New entity
|
|
|
+ foreach ($differences->getExpectedType() as $field => $type) {
|
|
|
+ $expectedFields[$field] = $type;
|
|
|
}
|
|
|
} else {
|
|
|
- $prop = $this->makeIdPropertySnippet();
|
|
|
+ // Existing entity
|
|
|
+ foreach ($differences as $field => $difference) {
|
|
|
+ $expectedFields[$field] = $difference->getExpectedType();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($expectedFields as $field => $expectedType) {
|
|
|
+ $prop = is_array($expectedType) ?
|
|
|
+ $this->makeSnippetEntityCollectionProp($field, $expectedType) :
|
|
|
+ $this->makeSnippetEntitySimpleProp($field, $expectedType);
|
|
|
+
|
|
|
$class->addMember($prop);
|
|
|
+
|
|
|
+ $methods = [...$methods, ...$this->makeMethodsSnippetForProp($field, $prop) ];
|
|
|
}
|
|
|
|
|
|
foreach ($methods as $method) {
|
|
|
@@ -114,6 +108,22 @@ class SchemaSnippetsMaker
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ protected function makeMethodsSnippetForProp(string $field, Property $prop): array {
|
|
|
+ $methods = [];
|
|
|
+
|
|
|
+ if ($prop->getType() !== 'Collection')
|
|
|
+ {
|
|
|
+ $methods[] = $this->makeSnippetGetterForProp($prop);
|
|
|
+ $methods[] = $this->makeSnippetSetterForProp($prop);
|
|
|
+ } else {
|
|
|
+ $methods[] = $this->makeSnippetGetterForProp($prop);
|
|
|
+ $methods[] = $this->makeSnippetAdderForCollection($prop);
|
|
|
+ $methods[] = $this->makeSnippetRemoverForCollection($prop);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $methods;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Génère un objet ClassType
|
|
|
* @see https://api.nette.org/php-generator/master/Nette/PhpGenerator/ClassType.html
|