Bug #88515
closedCannot unset DateTime value via null
0%
Description
Given an Extbase domain model with a DateTime
property and a DB field declared as usual:
my_date int(11) unsigned DEFAULT '0' NOT NULL
Setting a value here from a Fluid form works fine and the date is stored as timestamp in the DB.
However, when trying to clear this property, an SqlException
occurs:
(1/1) #1470230767 TYPO3\CMS\Extbase\Persistence\Generic\Storage\Exception\SqlErrorException
Column 'my_date' cannot be nullin /.../typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php line 197
The error occurs when Backend::persistObject()
calls DataMapper::getPlainValue()
with the current null
value for the DateTime
property and thus gets a string "NULL"
in return. This then fails because null
values are not allowed here in SQL.
An override of AbstractDomainObject::_getProperties()
with a fallback to 0
(zero) for date properties works around the issue, however this should be fixed in Extbase itself:
public function _getProperties(): array
{
$properties = parent::_getProperties();
$properties['myDate'] ??= 0;
return $properties;
}
Updated by Alexander Schnitzler over 4 years ago
- Status changed from New to Accepted
- Is Regression set to No
The correct default type is also dependent on the db type option set in the TCA. The one that determines if a field should be treated as an integer or datetime.
Updated by Alexander Schnitzler over 2 years ago
How does the property definition look like? Is null the default value here?
Updated by Claus Harup over 2 years ago
Yes - NULL is the default value:
I had:
/**
* @var Ship|null
*/
protected ?Ship $ship = null;
....
/**
* @return array
*/
public function _getProperties(): array
{
$properties = parent::_getProperties();
$properties['ship'] ??= 0;
return $properties;
}
Updated by Torben Hansen 3 months ago
- Related to Bug #103641: Not possible so set nullable relation values in extbase domain models added
Updated by Bastian Stargazer 21 days ago
- TYPO3 Version changed from 9 to 11
Issue still exists in v11.5.36
If the time is never set for a record, the (default) value is 0 in the database. If the field is once set via new \DateTime() in Extbase and saved, it is impossible to reset the field back to 0 in the database. This is a huge problem!
Updated by Garvin Hicking 21 days ago
- Status changed from Accepted to Resolved
I believe this is solved via https://forge.typo3.org/issues/103641
I will close this issue for now, if you feel this is a mistake or have additional feedback, please get in touch. You can also create a follow-up issue.