我想更新计划任务中的某些Extbase对象。我正在调用存储库以获取所有对象。然后,我设置该对象的一个属性,然后尝试进行更新。 那让我抛出了这个异常
用于更新的类型为“ FFPI \ FfpiNodeUpdates \ Domain \ Model \ Node”的对象必须已经保留,但是是新的。
vendor / typo3 / cms / typo3 / sysext / extbase / Classes / Persistence / Generic / PersistenceManager.php:237
跟踪结果是:
0:TYPO3 \ CMS \ Extbase \ Persistence \ Generic \ PersistenceManager
1:TYPO3 \ CMS \ Extbase \ Persistence \ Repository
2:FFPI \ FfpiNodeUpdates \ Task \ NotificationTask
3:FFPI \ FfpiNodeUpdates \ Task \ NotificationTask
4:TYPO3 \ CMS \ Scheduler \ Scheduler
5:TYPO3 \ CMS \ Scheduler \ Controller \ SchedulerModuleController
...
我的代码可以简化为此
$nodes = $this->nodeRepository->findAll()->toArray();
foreach ($nodes as $node){
$this->myUpdateFunction($node);
}
private function myUpdateFunction(Node $node)
{
$node->setOnline(true);
$this->nodeRepository->update($node); // <- Gives the exception
}
它在7.6中工作正常,但在8.7中不再起作用
我试图通过以下方式获取存储库
*依赖注入(剂量根本不起作用)
* GeneralUtility :: makeInstance()(我得到了仓库,但有例外)
* objectManager-> get()(我得到了仓库,但是有例外)
答案 0 :(得分:0)
首先,您仅应使用makeInstance()函数来获取对象管理器,然后应使用他而不是makeInstance()处理对象。
对于您的主要问题,我不确定是否有帮助,但是您可能必须使用PersistanceManger-> persistAll();。 在其代码中,有一条注释说:“将当前持久性会话中的新对象和对对象的更改提交到后端”
我希望这对您有帮助^^