diff --git a/src/Models/ActiveRecord.php b/src/Models/ActiveRecord.php index b6ca021..8b1555f 100644 --- a/src/Models/ActiveRecord.php +++ b/src/Models/ActiveRecord.php @@ -1648,7 +1648,11 @@ protected function _setFieldValue($field, $value) } } - if ($forceDirty || (empty($this->_record[$field]) && isset($value)) || ($this->_record[$field] !== $value)) { + $columnName = static::_cn($field); + $recordHasValue = array_key_exists($columnName, $this->_record); + $currentValue = $recordHasValue ? $this->_record[$columnName] : null; + + if ($forceDirty || (!$recordHasValue && isset($value)) || ($recordHasValue && $currentValue !== $value)) { $this->_setValueAndMarkDirty($field, $value, $fieldOptions); return true; } else { diff --git a/tests/Divergence/Models/ActiveRecordTest.php b/tests/Divergence/Models/ActiveRecordTest.php index d6541c1..b18006e 100644 --- a/tests/Divergence/Models/ActiveRecordTest.php +++ b/tests/Divergence/Models/ActiveRecordTest.php @@ -715,6 +715,17 @@ public function testSaveCanaryTimestamps() $this->assertNull($x->DateOfBirth); } + public function testNewCanaryAllowsNullableFieldsToBeSetWithoutWarnings() + { + $Canary = new Canary(); + + $Canary->Handle = null; + $Canary->LongestFlightTime = null; + + $this->assertNull($Canary->Handle); + $this->assertNull($Canary->LongestFlightTime); + } + /** * *