@@ -334,30 +334,37 @@ public function populatePatch($data) {
334
334
335
335
$ fieldData = ModelDefinitionCache::getFieldData ($ model ->getEntityName ());
336
336
$ fieldName2Type = [];
337
- foreach ($ fieldData as $ field ) $ fieldName2Type [$ field ->name ] = $ field ->type ;
337
+ foreach ($ fieldData as $ field ) {
338
+ $ fieldName2Type [$ field ->name ] = $ field ;
339
+ }
338
340
339
341
$ fields = array_keys ($ data );
340
342
$ fields = array_intersect ($ fields , $ model ->getTableFields ());
341
343
$ fields = array_diff ($ fields , $ this ->getPopulateIgnore ());
342
- foreach ($ data as $ field => $ value ) {
343
- if (in_array ($ field , $ fields )) {
344
- switch ($ fieldName2Type [$ field ]) {
345
- case 'int ' :
346
- $ this ->{$ field } = (int )$ value ;
347
- break ;
348
- case 'float ' :
349
- case 'double ' :
350
- case 'decimal ' :
351
- $ this ->{$ field } = (double )$ value ;
352
- break ;
353
- case 'tinyint ' :
354
- $ this ->{$ field } = (bool )$ value ;
355
- break ;
356
- case 'datetime ' :
357
- $ this ->{$ field } = $ value ? date ('Y-m-d H:i:s ' , strtotime ($ value )) : null ;
358
- break ;
359
- default :
360
- $ this ->{$ field } = $ value ;
344
+ foreach ($ data as $ field => $ value ) {
345
+ if (in_array ($ field , $ fields )) {
346
+ $ fieldData = $ fieldName2Type [$ field ];
347
+ if ($ fieldData ->nullable && is_null ($ value )) {
348
+ $ this ->{$ field } = null ;
349
+ } else {
350
+ switch ($ fieldName2Type [$ field ]->type ) {
351
+ case 'int ' :
352
+ $ this ->{$ field } = (int )$ value ;
353
+ break ;
354
+ case 'float ' :
355
+ case 'double ' :
356
+ case 'decimal ' :
357
+ $ this ->{$ field } = (double )$ value ;
358
+ break ;
359
+ case 'tinyint ' :
360
+ $ this ->{$ field } = (bool )$ value ;
361
+ break ;
362
+ case 'datetime ' :
363
+ $ this ->{$ field } = $ value ? date ('Y-m-d H:i:s ' , strtotime ($ value )) : null ;
364
+ break ;
365
+ default :
366
+ $ this ->{$ field } = $ value ;
367
+ }
361
368
}
362
369
}
363
370
}
0 commit comments