我有 TYPO3 版本 7.6.18
$newMessage = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Istar\\Femessages\\Domain\\Model\\Message');
$newMessage->setUserFrom($myUid);
$newMessage->setUserTo($userTo);
$newMessage->setChainUid($messageChainUid);
$newMessage->setMessage($message);
$this->messageRepository->add($newMessage);
$persistenceManager = $this->objectManager->get("TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager");
$persistenceManager->persistAll();
如果没有,存储库不会向数据库添加新内容
$persistenceManager = $this->objectManager->get("TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager");
$persistenceManager->persistAll();
请告诉我,为什么?
当请求完成并且您的操作已完成渲染视图和响应请求时,Extbase 的持久性管理器就会启动。这是设计使然,也是为什么存储库只存储它必须更新或插入您提供给它的对象而不是实际执行的操作。
这种方法与延迟加载有关,即当您真正需要数据时才加载数据。查看您的对象,当您请求它们时,存储库会将它们发送给您。如果您使用 xDebug 这样的调试器检查结果,您会注意到结果实际上不包含任何您请求的对象,它只是查询的表示。仅当您需要时才会获取数据,例如您致电toArray
在此QueryResult
object.
数据持久化也是如此。系统假设您不需要立即保留数据,因此它会等待将数据发送到数据库,直到完成所有请求的处理。这样,可以通过更少的数据库连接来包含数据,从而节省时间。
如果您在添加对象后确实需要保留它们,则需要调用PersistenceManager
就像你所描述的那样。如果您想生成指向新的、尚不存在的对象的链接,则可能是这样。
请记住,persistAll
方法按照它的说法执行,它将保留对所有存储库的所有对象的所有更改,直到执行点。据我所知,至少到目前为止,还没有办法只持久化一个特定的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)