ExtBase:无法删除调度程序任务中的子对象

时间:2016-04-28 22:20:26

标签: typo3 parent-child scheduler extbase removechild

我有以下模型:“Shelf”和“Book”,处于1:n关系。

还有一个调度程序任务(扩展“调度程序”6.2.0)分析书籍并删除它们。调度程序任务分为两类:任务本身及其业务逻辑。

任务:

namespace Vendor\MyExt\Scheduler;
class MultiStepProcessTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask {
    public function execute() {
        $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');

        $businessLogic = $objectManager->get(\Vendor\MyExt\Scheduler\MultiStepProcessTaskBusinessLogic::class);

        return $businessLogic->run();
    }
}

业务逻辑:

namespace Vendor\MyExt\Scheduler;
class MultiStepProcessTaskBusinessLogic {
    public function run() {
        $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');

        $shelvesRepository = $objectManager->get('Vendor\\MyExt\\Domain\\Repository\\ShelvesRepository');
        $shelf = $shelvesRepository->findOneByLastFinishedTaskNumber(0);
        $book = $shelf->getBooks()->current();
        ....    
        $shelf->removeBook($book);
        $shelvesRepository->update($shelf);

        return 1;
    }
}

如果从我的扩展程序中调用 - 一切正常:该书已删除。 为了测试它,我将这些行放入一个控制器的列表操作中:

$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
$businessLogic = $objectManager->get(\Vendor\MyExt\Scheduler\MultiStepProcessTaskBusinessLogic::class);
$businessLogic->run();

如果从调度程序调用(作为任务),则不会删除该书!创建存储库,获取工具架,获取工作簿。但是$shelf->removeBook($book);根本没有效果。有人可以解释一下为什么吗?

我正在使用TYPO3版本6.2.19

1 个答案:

答案 0 :(得分:1)

您需要实例化PersistenceManager,然后调用PersistenceManager->persistAll();。这样做的原因是在控制器操作中,默认情况下,在每个操作结束时调用它作为一种清理任务。默认情况下,您的任务不会执行此操作,因此您需要手动保留。