Forráskód Böngészése

SchemaSnippetsMaker: fix the ORM/JoinColumn attribute definition build

Olivier Massot 11 hónapja
szülő
commit
9a654df367

+ 29 - 6
src/Service/Doctrine/SchemaValidation/SchemaSnippetsMaker.php

@@ -437,16 +437,16 @@ class SchemaSnippetsMaker
             $options['targetEntity'] = $this->entityUtils->getEntityNameFromFullName($type['targetEntity']) . '::class';
         }
 
-        if (isset($type['inversedBy'])) {
-            $options['inversedBy'] = $type['inversedBy'];
-        }
-
         if (isset($type['cascade'])) {
             $options['cascade'] = $type['cascade'];
         } else {
             $options['cascade'] = ['persist'];
         }
 
+        if (isset($type['inversedBy'])) {
+            $options['inversedBy'] = $type['inversedBy'];
+        }
+
         if (isset($type['orphanRemoval']) && ($type['type'] === ClassMetadataInfo::ONE_TO_MANY || $type['type'] === ClassMetadataInfo::MANY_TO_MANY)) {
             $options['orphanRemoval'] = $type['orphanRemoval'];
         }
@@ -460,8 +460,31 @@ class SchemaSnippetsMaker
 
         $prop->addAttribute($relationClassNames[$type['type']], $options);
 
-        if ($type['type'] === ClassMetadataInfo::MANY_TO_ONE) {
-            $prop->addAttribute(JoinColumn::class, ['referencedColumnName' => 'id', 'nullable' => true, 'onDelete' => 'SET NULL']);
+        if (isset($type['joinColumns'])) {
+            foreach ($type['joinColumns'] as $joinColDefinition) {
+                $attributeOptions = [];
+
+                if ($joinColDefinition['name'] !== $type['fieldName'] . '_id') {
+                    $attributeOptions['name'] = $type['fieldName'] . '_id';
+                }
+                if ($joinColDefinition['unique'] === true) {
+                    $attributeOptions['unique'] = true;
+                }
+                if ($joinColDefinition['nullable'] === false) {
+                    $attributeOptions['nullable'] = false;
+                }
+                if ($joinColDefinition['onDelete'] !== null) {
+                    $attributeOptions['onDelete'] = $joinColDefinition['onDelete'];
+                }
+                if ($joinColDefinition['columnDefinition'] !== null) {
+                    $attributeOptions['referencedColumnName'] = $joinColDefinition['columnDefinition'];
+                }
+                if ($joinColDefinition['referencedColumnName'] !== 'id') {
+                    $attributeOptions['referencedColumnName'] = $joinColDefinition['referencedColumnName'];
+                }
+
+                $prop->addAttribute(JoinColumn::class, $attributeOptions);
+            }
         }
 
         return $prop;