如何解决已解决:TYPO3 控制器:批量插入时“字段列表”中的“uid”列未知 缺少字段:Calling Hook来自分机列表中的某处数据库表问题
首先,我使用 TYPO3 9.5.9 和 Doctrine QueryBuilder/ConnectionPool。
我尝试从控制器端进行一些备份和恢复。到目前为止,我已经设法到达还原点,我的控制器还原代码:
public static function loadBackup(array $backupSettings):int {
$affectedRows = 0;
$tableNames = explode(',',$backupSettings['tableNames']);
$tablePrefix = $backupSettings['tablePrefix'];
$backupPath = $backupSettings['path']. date("Ymd")."/";
foreach($tableNames as $table){
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
->getConnectionForTable($tablePrefix . $table);
$csv = array_map('str_getcsv',file($backupPath . $tablePrefix . $table . '.csv'));
array_walk($csv,function(&$a) use ($csv) {
$a = array_combine($csv[0],$a);
});
$headers = $csv[0];
array_shift($csv);
$affectedRows += $queryBuilder->bulkInsert(
$tablePrefix . $table,$csv,$headers
);
}
return $affectedRows;
}
到目前为止,这段代码是有效的,但我在运行恢复时遇到异常:
[ERROR] An exception occurred while executing 'INSERT INTO `tx_****_domain_model_link` (`uid`,`pid`,`tstamp`,`crdate`,`cruser_id`,`deleted`,`hidden`,`datasource`,`sha1`,`title`,`url`) VALUES (?,?,?)' with params ["900000000","1","0","","```",""]:
UnkNown column 'uid' in 'field list'
Doctrine\DBAL\Exception\InvalidFieldNameException thrown in line 60 in file
/var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMysqLDriver.PHP
首先,我认为 db/deFinition 中缺少 uid,但没有:
CREATE TABLE tx_****_domain_model_link (
uid int(11) unsigned NOT NULL AUTO_INCREMENT,pid int(11) unsigned NOT NULL DEFAULT '0',datasource smallint(5) unsigned NOT NULL DEFAULT '0',sha1 varchar(40) DEFAULT '' NOT NULL,title varchar(255) NOT NULL DEFAULT '',url varchar(1024) DEFAULT '' NOT NULL,PRIMARY KEY (uid));
即使在数据库中,该字段也在那里:
如果我尝试通过后端手动添加查询,则会出现相同的错误。如果我尝试使用管理员仪表板中的“新数据集”按钮添加新条目,它会起作用。即使我复制命令并使用不同的 ID 再次添加条目,它也可以工作 - 那么在控制器恢复期间我错过了什么?
工作指令:
INSERT INTO `tx_****_domain_model_link` (`uid`,`url`) VALUES ('23123123','0','','');
非常感谢任何帮助!
BR, 马丁
更新:找到解决方案:
好的,我发现了错误。
不幸的是,@GNB 的解决方案提示并没有帮助我得到正确的结果。
但是,我尝试使用 "<value>"
将单元格封装在 csv 中,并且:它有效!
无论如何,我改变了备份机制
- 导出到 csv
- 从 csv 导入
到:
- 将表复制到备份表,该表在具有相同架构之前创建(CREATE .. LIKE ..)
- 只需将值复制回,以防出错
感谢您的帮助。
BR, 马丁
解决方法
实际上不确定,但结合了与此问题相关的一些答案,
- 表中缺少字段
- Calling Hook(来自分机列表中的某处)
缺少字段:
显然,您拥有图像中的字段。
Calling Hook(来自分机列表中的某处)
有时外部因素可能是导致此类问题的原因。 Here @Mondblut 很好地解释了这一点。
数据库表问题
数据库表故障也可能存在。我不确定情况是否如此。但是,Here 是@Christiane 的伎俩!
此外,如果您有一些其他的扩展副本,这可能是一个冲突。按照@Sybille here 的说明进行操作。
希望这会有所帮助!
,好的,我发现了错误。
不幸的是,@GNB 的解决方案提示并没有帮助我得到正确的结果。
但是,我尝试使用 "<value>"
将单元格封装在 csv 中,并且:它有效!
无论如何,我改变了备份机制
- 导出到 csv
- 从 csv 导入
到:
- 将表复制到备份表,该表在具有相同架构之前创建(CREATE .. LIKE ..)
- 只需将值复制回,以防出错
感谢您的帮助。
BR, 马丁
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。