@@ -38,8 +38,10 @@ class AttributeDriver implements MappingDriver
3838 * @param array<string> $paths
3939 * @param true $reportFieldsWhereDeclared no-op, to be removed in 4.0
4040 */
41- public function __construct (array $ paths , bool $ reportFieldsWhereDeclared = true )
42- {
41+ public function __construct (
42+ array $ paths ,
43+ bool $ reportFieldsWhereDeclared = true ,
44+ ) {
4345 if (! $ reportFieldsWhereDeclared ) {
4446 throw new InvalidArgumentException (sprintf (
4547 'The $reportFieldsWhereDeclared argument is no longer supported, make sure to omit it when calling %s. ' ,
@@ -297,7 +299,7 @@ public function loadMetadataForClass(string $className, PersistenceClassMetadata
297299 $ joinColumnAttributes = $ this ->reader ->getPropertyAttributeCollection ($ property , Mapping \JoinColumn::class);
298300
299301 foreach ($ joinColumnAttributes as $ joinColumnAttribute ) {
300- $ joinColumns [] = $ this ->joinColumnToArray ($ joinColumnAttribute );
302+ $ joinColumns [] = $ this ->joinColumnToArray ($ joinColumnAttribute, $ metadata -> inferPhpNullability );
301303 }
302304
303305 // Field can only be attributed with one of:
@@ -310,7 +312,7 @@ public function loadMetadataForClass(string $className, PersistenceClassMetadata
310312 $ embeddedAttribute = $ this ->reader ->getPropertyAttribute ($ property , Mapping \Embedded::class);
311313
312314 if ($ columnAttribute !== null ) {
313- $ mapping = $ this ->columnToArray ($ property ->name , $ columnAttribute );
315+ $ mapping = $ this ->columnToArray ($ property ->name , $ columnAttribute, $ metadata -> inferPhpNullability );
314316
315317 if ($ this ->reader ->getPropertyAttribute ($ property , Mapping \Id::class)) {
316318 $ mapping ['id ' ] = true ;
@@ -530,7 +532,7 @@ public function loadMetadataForClass(string $className, PersistenceClassMetadata
530532 $ attributeOverridesAnnot = $ classAttributes [Mapping \AttributeOverrides::class];
531533
532534 foreach ($ attributeOverridesAnnot ->overrides as $ attributeOverride ) {
533- $ mapping = $ this ->columnToArray ($ attributeOverride ->name , $ attributeOverride ->column );
535+ $ mapping = $ this ->columnToArray ($ attributeOverride ->name , $ attributeOverride ->column , $ metadata -> inferPhpNullability );
534536
535537 $ metadata ->setAttributeOverride ($ attributeOverride ->name , $ mapping );
536538 }
@@ -680,12 +682,12 @@ private function getMethodCallbacks(ReflectionMethod $method): array
680682 * options?: array<string, mixed>
681683 * }
682684 */
683- private function joinColumnToArray (Mapping \JoinColumn |Mapping \InverseJoinColumn $ joinColumn ): array
685+ private function joinColumnToArray (Mapping \JoinColumn |Mapping \InverseJoinColumn $ joinColumn, bool $ inferPhpNullability = false ): array
684686 {
685687 $ mapping = [
686688 'name ' => $ joinColumn ->name ,
687689 'unique ' => $ joinColumn ->unique ,
688- 'nullable ' => $ joinColumn ->nullable ,
690+ 'nullable ' => $ inferPhpNullability && ! $ joinColumn -> nullableSet ? null : $ joinColumn ->nullable ,
689691 'onDelete ' => $ joinColumn ->onDelete ,
690692 'columnDefinition ' => $ joinColumn ->columnDefinition ,
691693 'referencedColumnName ' => $ joinColumn ->referencedColumnName ,
@@ -708,23 +710,23 @@ private function joinColumnToArray(Mapping\JoinColumn|Mapping\InverseJoinColumn
708710 * scale: int,
709711 * length: int,
710712 * unique: bool,
711- * nullable: bool,
713+ * nullable: bool|null ,
712714 * precision: int,
713715 * enumType?: class-string,
714716 * options?: mixed[],
715717 * columnName?: string,
716718 * columnDefinition?: string
717719 * }
718720 */
719- private function columnToArray (string $ fieldName , Mapping \Column $ column ): array
721+ private function columnToArray (string $ fieldName , Mapping \Column $ column, bool $ inferPhpNullability = false ): array
720722 {
721723 $ mapping = [
722724 'fieldName ' => $ fieldName ,
723725 'type ' => $ column ->type ,
724726 'scale ' => $ column ->scale ,
725727 'length ' => $ column ->length ,
726728 'unique ' => $ column ->unique ,
727- 'nullable ' => $ column ->nullable ,
729+ 'nullable ' => $ inferPhpNullability && ! $ column -> nullableSet ? null : $ column ->nullable ,
728730 'precision ' => $ column ->precision ,
729731 ];
730732
0 commit comments