首先,我使用 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", "0", "0", "1", "0", "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
首先,我以为数据库/定义中缺少 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`, `pid`, `tstamp`, `crdate`, `cruser_id`, `deleted`, `hidden`, `datasource`, `sha1`, `title`, `url`) VALUES ('23123123', '0', '0', '0', '0', '0', '0', '0', '', '', '');
非常感谢任何帮助!
BR, 马丁
更新:找到解决方案:
好吧,我发现错误了。
不幸的是,@GNB 的解决方案提示并没有帮助我得到正确的结果。
但是,我尝试用
"<value>"
将单元格封装在 csv 中并且:它有效!
无论如何,我改变了备份机制
至:
感谢您的帮助。
BR, 马丁
好吧,我发现错误了。
不幸的是,@GNB 的解决方案提示并没有帮助我得到正确的结果。
但是,我尝试用
"<value>"
封装 csv 中的单元格并且:它有效!
无论如何,我改变了备份机制
至: