【问题标题】:TYPO3 Remove data from the databaseTYPO3 从数据库中删除数据
【发布时间】:2018-06-19 13:57:24
【问题描述】:

我创建了一个扩展程序,我想在我的 ImportAction 上导入和删除数据。 尽管 Import sn-p 有效,但 remove 无效。

请注意,this 对我不起作用。

这是我目前所拥有的:

  1. 我在我的 TYPO3 安装中安装了我的扩展
  2. 我已包含静态模板
  3. 我已将 PID 包含在常量编辑器中
  4. 我清除了所有与缓存有关的内容
  5. 我在数据库上创建了 2 个元素,并且 pid=4 在那里。这意味着常量编辑器设置有效。

我正在使用 TYPO3 7.6.23

这是我的代码不起作用:

$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$myRepository = $objectManager->get('BW....\MyImporter\Domain\Repository\MyRepository');
$myRepository->removeAll();

这是成功导入数据的代码(这里我在我的 PHP 文件顶部使用 USE,这就是为什么有这个 myImport::class 的原因)。

 $finalTitle = 'This is a Test';
 $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
 $newMyImport = $objectManager->get(myImport::class);
 $newMyImport->setTitle($finalTitle);
 $this->myRepository->add($newMyImport);
 print_r($newMyImport);

如何从我的数据库中删除所有元素以及 ID? ID达到254206782就不好了。

提前致谢,

【问题讨论】:

  • 您必须在 Typosscript 上设置 PID 或使用查询集,请在此处查看答案 stackoverflow.com/questions/44539156/…。这确实设置了 deleted=1,而不是像您在解决方案中所做的那样完全删除条目,就像 TRUNCATE 一样。

标签: php database typo3 typo3-7.6.x removeall


【解决方案1】:

uid 字段是 AUTO_INCREMENT,只有在您删除并重新创建表时才会重置。

因此,即使删除100uid 最高的行,下一个新行也会将101 变为uid

【讨论】:

    【解决方案2】:

    您可以使用一些裸 SQL。如果它们在 GUI 中支持此操作,您也可以使用一些工具,如 phpMyAdmin、Adminer 或 Sequel。

    由于 TYPO3 不会删除任何记录,而是将它们标记为已删除,因此您首先需要真正删除 已删除 记录。

    DELETE * FROM <table> WHERE deleted = 1;
    

    然后你需要评估一个新的自增值,它可以是:

    SELECT max(uid) from <table>;
    

    结果加 1。

    由于这仍然可能是一个非常高的值(例如,如果最后一条记录未被删除),您可能会使用较低的值,并且将使用下一个空闲 id。

    现在您可以将自动增量设置为您的值:

    ALTER TABLE <table> AUTO_INCREMENT=<your value>; 
    

    【讨论】:

    • 这是不够的,可能有例如已删除=1 的页面和已删除=0 的子页面,但它们未在任何地方引用,因此也应删除。
    【解决方案3】:

    有点晚了,但我想出了一个办法,而且效果很好。

    我不得不截断我的表格!

    这是我的 Task.php 上的代码(因为我的调度程序上有它)。

    /*Create connection to Truncate the database*/
        $servername = TYPO3_db_host;
        $username = TYPO3_db_username;
        $password = TYPO3_db_password;
        $dbname = TYPO3_db;
        // Create connection
        $databaseConnect = mysqli_connect($servername, $username, $password, $dbname);
        $repositoryRemove = "TRUNCATE TABLE tx_importer_domain_model_import";
        $repositoryAttachmentsRemove = "TRUNCATE TABLE tx_importer_domain_model_attachments";
        $mysql = mysqli_query($databaseConnect, $repositoryRemove);
        $mysql1 = mysqli_query($databaseConnect, $repositoryAttachmentsRemove);
        mysqli_close($databaseConnect);
    

    就这样,我的表格删除成功了!

    最好的问候,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2015-07-01
      相关资源
      最近更新 更多