微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

已解决:TYPO3 控制器:批量插入时“字段列表”中的“uid”列未知 缺少字段:Calling Hook来自分机列表中的某处数据库表问题

如何解决已解决: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));

即使在数据库中,该字段也在那里:

Table definition

如果我尝试通过后端手动添加查询,则会出现相同的错误。如果我尝试使用管理员仪表板中的“新数据集”按钮添加新条目,它会起作用。即使我复制命令并使用不同的 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 举报,一经查实,本站将立刻删除。