Bug #88515
openCannot 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 23 days ago
- Related to Bug #103641: Not possible so set nullable relation values in extbase domain models added