TYPO3 从数据库中删除数据

TYPO3 Remove data from the database

我已经创建了一个扩展,我想在我的 ImportAction 上导入和删除数据。 虽然导入代码段有效,但删除无效。

请注意,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就不好了。

提前致谢,

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

因此,即使在删除 100 中具有最高 uid 的行之后,下一个新行也会得到 101 作为 uid

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

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

DELETE * FROM <table> WHERE deleted = 1;

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

SELECT max(uid) from <table>;

将结果加 1。

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

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

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

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

I had to truncate my table!

这是我 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);

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

此致,