@@ -128,7 +128,7 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
128128
129129 // Evaluate named queries
130130 if (isset ($ xmlRoot ->{'named-queries ' })) {
131- foreach ($ xmlRoot ->{'named-queries ' }->{'named-query ' } as $ namedQueryElement ) {
131+ foreach ($ xmlRoot ->{'named-queries ' }->{'named-query ' } ?? [] as $ namedQueryElement ) {
132132 $ metadata ->addNamedQuery (
133133 [
134134 'name ' => (string ) $ namedQueryElement ['name ' ],
@@ -140,7 +140,7 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
140140
141141 // Evaluate native named queries
142142 if (isset ($ xmlRoot ->{'named-native-queries ' })) {
143- foreach ($ xmlRoot ->{'named-native-queries ' }->{'named-native-query ' } as $ nativeQueryElement ) {
143+ foreach ($ xmlRoot ->{'named-native-queries ' }->{'named-native-query ' } ?? [] as $ nativeQueryElement ) {
144144 $ metadata ->addNamedNativeQuery (
145145 [
146146 'name ' => isset ($ nativeQueryElement ['name ' ]) ? (string ) $ nativeQueryElement ['name ' ] : null ,
@@ -154,7 +154,7 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
154154
155155 // Evaluate sql result set mapping
156156 if (isset ($ xmlRoot ->{'sql-result-set-mappings ' })) {
157- foreach ($ xmlRoot ->{'sql-result-set-mappings ' }->{'sql-result-set-mapping ' } as $ rsmElement ) {
157+ foreach ($ xmlRoot ->{'sql-result-set-mappings ' }->{'sql-result-set-mapping ' } ?? [] as $ rsmElement ) {
158158 $ entities = [];
159159 $ columns = [];
160160 foreach ($ rsmElement as $ entityElement ) {
@@ -240,7 +240,7 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
240240 // Evaluate <indexes...>
241241 if (isset ($ xmlRoot ->indexes )) {
242242 $ metadata ->table ['indexes ' ] = [];
243- foreach ($ xmlRoot ->indexes ->index as $ indexXml ) {
243+ foreach ($ xmlRoot ->indexes ->index ?? [] as $ indexXml ) {
244244 $ index = [];
245245
246246 if (isset ($ indexXml ['columns ' ]) && ! empty ($ indexXml ['columns ' ])) {
@@ -283,7 +283,7 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
283283 // Evaluate <unique-constraints..>
284284 if (isset ($ xmlRoot ->{'unique-constraints ' })) {
285285 $ metadata ->table ['uniqueConstraints ' ] = [];
286- foreach ($ xmlRoot ->{'unique-constraints ' }->{'unique-constraint ' } as $ uniqueXml ) {
286+ foreach ($ xmlRoot ->{'unique-constraints ' }->{'unique-constraint ' } ?? [] as $ uniqueXml ) {
287287 $ unique = [];
288288
289289 if (isset ($ uniqueXml ['columns ' ]) && ! empty ($ uniqueXml ['columns ' ])) {
@@ -370,7 +370,7 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
370370
371371 // Evaluate <id ...> mappings
372372 $ associationIds = [];
373- foreach ($ xmlRoot ->id as $ idElement ) {
373+ foreach ($ xmlRoot ->id ?? [] as $ idElement ) {
374374 if (isset ($ idElement ['association-key ' ]) && $ this ->evaluateBoolean ($ idElement ['association-key ' ])) {
375375 $ associationIds [(string ) $ idElement ['name ' ]] = true ;
376376 continue ;
@@ -439,7 +439,7 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
439439 if (isset ($ oneToOneElement ->{'join-column ' })) {
440440 $ joinColumns [] = $ this ->joinColumnToArray ($ oneToOneElement ->{'join-column ' });
441441 } elseif (isset ($ oneToOneElement ->{'join-columns ' })) {
442- foreach ($ oneToOneElement ->{'join-columns ' }->{'join-column ' } as $ joinColumnElement ) {
442+ foreach ($ oneToOneElement ->{'join-columns ' }->{'join-column ' } ?? [] as $ joinColumnElement ) {
443443 $ joinColumns [] = $ this ->joinColumnToArray ($ joinColumnElement );
444444 }
445445 }
@@ -490,7 +490,7 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
490490
491491 if (isset ($ oneToManyElement ->{'order-by ' })) {
492492 $ orderBy = [];
493- foreach ($ oneToManyElement ->{'order-by ' }->{'order-by-field ' } as $ orderByField ) {
493+ foreach ($ oneToManyElement ->{'order-by ' }->{'order-by-field ' } ?? [] as $ orderByField ) {
494494 $ orderBy [(string ) $ orderByField ['name ' ]] = isset ($ orderByField ['direction ' ])
495495 ? (string ) $ orderByField ['direction ' ]
496496 : Criteria::ASC ;
@@ -542,7 +542,7 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
542542 if (isset ($ manyToOneElement ->{'join-column ' })) {
543543 $ joinColumns [] = $ this ->joinColumnToArray ($ manyToOneElement ->{'join-column ' });
544544 } elseif (isset ($ manyToOneElement ->{'join-columns ' })) {
545- foreach ($ manyToOneElement ->{'join-columns ' }->{'join-column ' } as $ joinColumnElement ) {
545+ foreach ($ manyToOneElement ->{'join-columns ' }->{'join-column ' } ?? [] as $ joinColumnElement ) {
546546 $ joinColumns [] = $ this ->joinColumnToArray ($ joinColumnElement );
547547 }
548548 }
@@ -601,11 +601,11 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
601601 $ joinTable ['options ' ] = $ this ->parseOptions ($ joinTableElement ->options ->children ());
602602 }
603603
604- foreach ($ joinTableElement ->{'join-columns ' }->{'join-column ' } as $ joinColumnElement ) {
604+ foreach ($ joinTableElement ->{'join-columns ' }->{'join-column ' } ?? [] as $ joinColumnElement ) {
605605 $ joinTable ['joinColumns ' ][] = $ this ->joinColumnToArray ($ joinColumnElement );
606606 }
607607
608- foreach ($ joinTableElement ->{'inverse-join-columns ' }->{'join-column ' } as $ joinColumnElement ) {
608+ foreach ($ joinTableElement ->{'inverse-join-columns ' }->{'join-column ' } ?? [] as $ joinColumnElement ) {
609609 $ joinTable ['inverseJoinColumns ' ][] = $ this ->joinColumnToArray ($ joinColumnElement );
610610 }
611611
@@ -618,7 +618,7 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
618618
619619 if (isset ($ manyToManyElement ->{'order-by ' })) {
620620 $ orderBy = [];
621- foreach ($ manyToManyElement ->{'order-by ' }->{'order-by-field ' } as $ orderByField ) {
621+ foreach ($ manyToManyElement ->{'order-by ' }->{'order-by-field ' } ?? [] as $ orderByField ) {
622622 $ orderBy [(string ) $ orderByField ['name ' ]] = isset ($ orderByField ['direction ' ])
623623 ? (string ) $ orderByField ['direction ' ]
624624 : Criteria::ASC ;
@@ -644,9 +644,9 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
644644
645645 // Evaluate association-overrides
646646 if (isset ($ xmlRoot ->{'attribute-overrides ' })) {
647- foreach ($ xmlRoot ->{'attribute-overrides ' }->{'attribute-override ' } as $ overrideElement ) {
647+ foreach ($ xmlRoot ->{'attribute-overrides ' }->{'attribute-override ' } ?? [] as $ overrideElement ) {
648648 $ fieldName = (string ) $ overrideElement ['name ' ];
649- foreach ($ overrideElement ->field as $ field ) {
649+ foreach ($ overrideElement ->field ?? [] as $ field ) {
650650 $ mapping = $ this ->columnToArray ($ field );
651651 $ mapping ['fieldName ' ] = $ fieldName ;
652652 $ metadata ->setAttributeOverride ($ fieldName , $ mapping );
@@ -656,14 +656,14 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
656656
657657 // Evaluate association-overrides
658658 if (isset ($ xmlRoot ->{'association-overrides ' })) {
659- foreach ($ xmlRoot ->{'association-overrides ' }->{'association-override ' } as $ overrideElement ) {
659+ foreach ($ xmlRoot ->{'association-overrides ' }->{'association-override ' } ?? [] as $ overrideElement ) {
660660 $ fieldName = (string ) $ overrideElement ['name ' ];
661661 $ override = [];
662662
663663 // Check for join-columns
664664 if (isset ($ overrideElement ->{'join-columns ' })) {
665665 $ joinColumns = [];
666- foreach ($ overrideElement ->{'join-columns ' }->{'join-column ' } as $ joinColumnElement ) {
666+ foreach ($ overrideElement ->{'join-columns ' }->{'join-column ' } ?? [] as $ joinColumnElement ) {
667667 $ joinColumns [] = $ this ->joinColumnToArray ($ joinColumnElement );
668668 }
669669
@@ -685,13 +685,13 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
685685 }
686686
687687 if (isset ($ joinTableElement ->{'join-columns ' })) {
688- foreach ($ joinTableElement ->{'join-columns ' }->{'join-column ' } as $ joinColumnElement ) {
688+ foreach ($ joinTableElement ->{'join-columns ' }->{'join-column ' } ?? [] as $ joinColumnElement ) {
689689 $ joinTable ['joinColumns ' ][] = $ this ->joinColumnToArray ($ joinColumnElement );
690690 }
691691 }
692692
693693 if (isset ($ joinTableElement ->{'inverse-join-columns ' })) {
694- foreach ($ joinTableElement ->{'inverse-join-columns ' }->{'join-column ' } as $ joinColumnElement ) {
694+ foreach ($ joinTableElement ->{'inverse-join-columns ' }->{'join-column ' } ?? [] as $ joinColumnElement ) {
695695 $ joinTable ['inverseJoinColumns ' ][] = $ this ->joinColumnToArray ($ joinColumnElement );
696696 }
697697 }
@@ -715,14 +715,14 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
715715
716716 // Evaluate <lifecycle-callbacks...>
717717 if (isset ($ xmlRoot ->{'lifecycle-callbacks ' })) {
718- foreach ($ xmlRoot ->{'lifecycle-callbacks ' }->{'lifecycle-callback ' } as $ lifecycleCallback ) {
718+ foreach ($ xmlRoot ->{'lifecycle-callbacks ' }->{'lifecycle-callback ' } ?? [] as $ lifecycleCallback ) {
719719 $ metadata ->addLifecycleCallback ((string ) $ lifecycleCallback ['method ' ], constant ('Doctrine\ORM\Events:: ' . (string ) $ lifecycleCallback ['type ' ]));
720720 }
721721 }
722722
723723 // Evaluate entity listener
724724 if (isset ($ xmlRoot ->{'entity-listeners ' })) {
725- foreach ($ xmlRoot ->{'entity-listeners ' }->{'entity-listener ' } as $ listenerElement ) {
725+ foreach ($ xmlRoot ->{'entity-listeners ' }->{'entity-listener ' } ?? [] as $ listenerElement ) {
726726 $ className = (string ) $ listenerElement ['class ' ];
727727 // Evaluate the listener using naming convention.
728728 if ($ listenerElement ->count () === 0 ) {
@@ -744,16 +744,14 @@ public function loadMetadataForClass($className, PersistenceClassMetadata $metad
744744 /**
745745 * Parses (nested) option elements.
746746 *
747- * @param SimpleXMLElement $options The XML element.
748- *
749747 * @return mixed[] The options array.
750748 * @psalm-return array<int|string, array<int|string, mixed|string>|bool|string>
751749 */
752- private function parseOptions (SimpleXMLElement $ options ): array
750+ private function parseOptions (? SimpleXMLElement $ options ): array
753751 {
754752 $ array = [];
755753
756- foreach ($ options as $ option ) {
754+ foreach ($ options ?? [] as $ option ) {
757755 if ($ option ->count ()) {
758756 $ value = $ this ->parseOptions ($ option ->children ());
759757 } else {
@@ -816,7 +814,7 @@ private function joinColumnToArray(SimpleXMLElement $joinColumnElement): array
816814 }
817815
818816 if (isset ($ joinColumnElement ['options ' ])) {
819- $ joinColumn ['options ' ] = $ this ->parseOptions ($ joinColumnElement ['options ' ]->children ());
817+ $ joinColumn ['options ' ] = $ this ->parseOptions ($ joinColumnElement ['options ' ] ? $ joinColumnElement [ ' options ' ] ->children () : null );
820818 }
821819
822820 return $ joinColumn ;
@@ -972,19 +970,19 @@ protected function loadMappingFile($file)
972970
973971 if (isset ($ xmlElement ->entity )) {
974972 foreach ($ xmlElement ->entity as $ entityElement ) {
975- /** @psalm-var class-string */
973+ /** @psalm-var class-string $entityName */
976974 $ entityName = (string ) $ entityElement ['name ' ];
977975 $ result [$ entityName ] = $ entityElement ;
978976 }
979977 } elseif (isset ($ xmlElement ->{'mapped-superclass ' })) {
980978 foreach ($ xmlElement ->{'mapped-superclass ' } as $ mappedSuperClass ) {
981- /** @psalm-var class-string */
979+ /** @psalm-var class-string $className */
982980 $ className = (string ) $ mappedSuperClass ['name ' ];
983981 $ result [$ className ] = $ mappedSuperClass ;
984982 }
985983 } elseif (isset ($ xmlElement ->embeddable )) {
986984 foreach ($ xmlElement ->embeddable as $ embeddableElement ) {
987- /** @psalm-var class-string */
985+ /** @psalm-var class-string $embeddableName */
988986 $ embeddableName = (string ) $ embeddableElement ['name ' ];
989987 $ result [$ embeddableName ] = $ embeddableElement ;
990988 }
0 commit comments