我遇到了以下问题:
#1470230767 TYPO3\CMS\Extbase\Persistence\Generic\Storage\Exception\SqlErrorException
列 'linked_module' 不能为空
我有一个具有此属性的域模型:
/**
* @var Module|null
*/
protected ?Module $linkedModule = null;
模块只是另一个领域模型,这个值不是强制性的。数据库定义如下所示:
linked_module int(11) unsigned DEFAULT '0' NOT NULL,
最后但并非最不重要的相关 TCA:
config => [
'autoSizeMax' => 1,
'default' => 0,
'eval' => 'int',
'foreign_table' => 'tx_psbriskassessment_domain_model_module',
'items' => [
['---', 0],
],
'maxitems' => 1,
'minitems' => 0,
'renderType' => 'selectSingle',
'size' => 1,
'type' => 'select',
]
在我的控制器的一个动作中,我想重置这个属性的值:
$module->setLinkedModule(null);
$this->moduleRepository->update($module);
这引发了异常(见本文开头)。我正在使用TYPO3 v11.5.4并假设 DataMapper 会将 NULL 转换为 0,因为 eval=int。但这不会发生。
EXT:extbase/Classes/Persistence/Generic/Backend.php
我深入核心并在(第 295 行)中找到了函数 persistObject( )。如果我正确阅读了代码,NULL 值总是作为 NULL 传递给数据库——此时无法进行转换。
我敢肯定,我只是错过了一个简单的点。在数据库服务器上禁用严格模式对我来说是没有选择的。必须有一个干净的解决方案。