typo3 - 为什么 Extbase PersistenceManager 认为我的对象是新的?
问题描述
我想更新调度程序任务中的一些 Extbase 对象。我正在调用存储库来获取所有对象。然后我设置该对象的一个属性,并尝试更新它。这引发了我这个异常
提供给更新的“FFPI\FfpiNodeUpdates\Domain\Model\Node”类型的对象必须已经持久化,但是是新的。
供应商/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() (我得到了 repo,但有例外)
* objectManager->get() (我得到了 repo,但有例外)
更新:我在 9.5 版也有这个问题
解决方案
首先你应该只使用 makeInstance() 函数来获取对象管理器,然后你应该使用他而不是 makeInstance() 来处理你的对象。
对于您的主要问题,我不确定它是否有帮助,但您可能必须使用 PersistanceManger->persistAll(); 在其代码中,有一条注释说:“将当前持久会话中的新对象和对对象的更改提交到后端”
我希望这会有所帮助^^
推荐阅读
- regex - CloudWatch 洞察日志解析
- microsoft-graph-api - 已发送邮件消息通知的 ErrorItemNotFound
- c++ - 如何在 C++ 中的 libtorch 中按第一维对张量进行排序?
- javascript - 如何在循环中同步运行 setTimeout
- r - 如何使用特征函数找到矩阵的根?
- django-models - 无法让 django 视图按类别过滤对象(外键属性)
- npm - 如何将 PostCSS PreCSS 插件添加到项目中
- kotlin - Kotlin:未解决的参考:使用,
- javascript - JS Script Uncaught ReferenceError: $ is Not Defined When Loading HTML File to Server
- skaffold - 如何从 skaffold 中 docker hub 的 docker 映像运行 docker 容器?