Project

General

Profile

Actions

Bug #88515

open

Cannot unset DateTime value via null

Added by Mathias Brodala almost 5 years ago. Updated about 1 year ago.

Status:
Accepted
Priority:
Must have
Assignee:
-
Category:
Extbase
Target version:
-
Start date:
2019-06-07
Due date:
% Done:

0%

Estimated time:
TYPO3 Version:
9
PHP Version:
Tags:
Complexity:
Is Regression:
No
Sprint Focus:

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 null

in /.../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;
}

Related issues 1 (1 open0 closed)

Related to TYPO3 Core - Bug #103641: Not possible so set nullable relation values in extbase domain modelsUnder ReviewTorben Hansen2024-04-16

Actions
Actions #1

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.

Actions #2

Updated by Mathias Brodala over 2 years ago

  • Description updated (diff)
Actions #3

Updated by Mathias Brodala over 2 years ago

  • Description updated (diff)
Actions #4

Updated by Alexander Schnitzler over 2 years ago

How does the property definition look like? Is null the default value here?

Actions #5

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;
}
Actions #6

Updated by Jan Kornblum about 1 year ago

Still same issue in 10 LTS...

Actions #7

Updated by Torben Hansen 7 days ago

  • Related to Bug #103641: Not possible so set nullable relation values in extbase domain models added
Actions

Also available in: Atom PDF