如何在 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 的迭代更有效。
我正在使用命令控制器导入汽车列表。现在我想将所有已经存在于 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 的迭代更有效。