我正在使用命令控制器导入汽车列表。现在我想将已经存在的所有车辆设置到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命令时将更新汽车,但是只有运行已删除属性才会更新导入命令两次。
答案 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的迭代更有效。