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

时间:2015-10-28 17:05:59

标签: repository typo3-6.2.x

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

我的importCommand如下所示:

/**
 * 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,我可以看到在运行import命令时将更新汽车,但是只有运行已删除属性才会更新导入命令两次。

1 个答案:

答案 0 :(得分:0)

你正在制造很多过热的东西...即你可以用普通的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的迭代更有效。