如何在 TYPO3 中恢复已删除的对象?

How can I restore a deleted object in TYPO3?

我正在使用命令控制器导入汽车列表。现在我想将所有已经存在于 TYPO3 数据库中的汽车设置为 deleted = 1 在我开始导入之前。之后我只想更新导入列表中的汽车,但这只有在我 运行 两次导入命令时才有效,我不知道为什么。

我的导入命令如下所示:

/**
 * import command
 *
 * @return void
 */
public function importCommand() {

    // get all cars from repository
    $currentCars = $this->carRepository->findAll();

    foreach ($currentCars as $car) {
        // mark all cars as deleted
        $this->carRepository->remove($car);
    }

    ... read list and store imported data into cars array

    foreach ($this->cars as $car) {

        // check if car exists
        if (!$this->carRepository->exists($car[1])) {

            $carObject = $this->objectManager->get(
                'Fox\Example\Domain\Model\Car'
            );

            $this->carExists = false;

        } else {

            $carObject = $this->carRepository->getCarByGroupId($car[1])[0];

            $this->carExists = true;

        }

        ... set car properties

        if (!$this->carExists) {
            $this->carRepository->add($carObject);
        } else {
            $carObject->setDeleted(0);
            $this->carRepository->update($carObject);
        }

    }

}

如果我通过 shell 运行 命令控制器然后查看 phpmyadmin 我可以看到当我 运行 输入命令时汽车将被更新,但是 属性 删除 仅当我 运行 输入命令两次时才会更新。

恕我直言,你产生了很多过热问题...也就是说,你可以将所有汽车标记为通用 TYPO3 DB API,即使在 Extbase 存储库中也能正常工作:

// Delete all
$GLOBALS['TYPO3_DB']->exec_DELETEquery('tx_example_domain_model_car', '1');

// Restore all
$GLOBALS['TYPO3_DB']->exec_UPDATEquery('tx_example_domain_model_car', 'deleted=1', array('deleted' => 0));

另一方面,您绝对应该使用deleted字段来做到这一点!相反,创建一个布尔字段,如 hiddenBeforeImport 并修改你的 exists(...) 方法并将其设置为 true 而不是删除项目,原因很简单,很快你将无法识别删除的是哪辆车,因为它已被删除在导入之前,它被删除了,因为有人在 BE 中单击了 thrash 图标。当然,自定义字段 DB API 方法也会比 Extbase 的迭代更有效。