基本上:每次我使用extension_builder添加新的类/模型然后想要创建该类的记录时,我会收到以下错误消息:
2:SQL错误:'未知列'已编辑'在'字段列表'' (tx_icingaconfgen_domain_model_checkperiod:NEW5a27f9da8a41d636846075)
有趣的是:“编辑”不是该类的属性,而是该扩展中其他类的属性。我已经搜索了抛出错误的类的TCA以及MySql表本身,但是“编辑”字段确实不是该类的一部分。这是怎么回事?
编辑:我感到有趣的是,当我手动向MySql表添加“已编辑”列时,可以创建记录。但我绝不会在我的模型中使用此属性。为什么它需要该名称的MySql列呢?
答案 0 :(得分:0)
如果没有看到代码,我只能猜测是怎么回事。当记录持续存在时,该领域肯定是必需的。所以你有可能在你的TCA中引用它。如果不在columns
部分的ctrl
中:
'ctrl' => [
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
...
],
如果更改或创建了recods,这些字段会自动更新。这些领域更多。请检查您的ctrl
部分。
也可以将另一个属性(甚至可能是另一个类)映射到TypoScript中的数据库字段,如下所示:
plugin.tx_myextension {
persistence {
classes {
MyVendor\MyExtension\Domain\Model\Person {
mapping {
tableName = tt_address
recordType = \MyVendor\MyExtension\Domain\Model\Person
columns {
birthday.mapOnProperty = dateOfBirth
}
}
}
}
}
}
取自here。
的示例答案 1 :(得分:0)
事实证明,罪魁祸首实际上是ext_localconf.php中的这行代码:
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['extkey'] = 'Cjk\\Icingaconfgen\\Hook\\EvalHook';
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']['extkey'] = 'Cjk\\Icingaconfgen\\Hook\\EvalHook';
这是我在我的扩展中实现的一个钩子,它只标记是否在BE中编辑了一条记录。我实际上使用这个Hook,每当编辑一个记录时,将编辑的propety从0改为1.这当然是预期的,但是类checkperiod没有属性'edited'。但由于Datamapper的钩子适用于每个更改或创建的记录,因此它也会尝试在没有此属性的类中更改“已编辑”。 Hook本身的一个简单的if条件,如果$ fieldArray的'编辑'键是NULL解决了我的问题。
class EvalHook {
function processDatamap_postProcessFieldArray($status, $table, $id, &$fieldArray, &$pObj) {
if($status == "update" && $table != 'tx_icingaconfgen_domain_model_checkperiod'){
$fieldArray[edited] = 1;
}
elseif($status != "update" && $table != 'tx_icingaconfgen_domain_model_checkperiod){
$fieldArray[edited] = 0;
}
}
}