使用 "processDatamap_afterDatabaseOperations" 与 "tx_news_domain_model_news" 和状态 "new" 最终没有空类别

Using "processDatamap_afterDatabaseOperations" with "tx_news_domain_model_news" and status "new" ends up without empty category

我在我的扩展程序中使用 "processDatamap_afterDatabaseOperations" 挂钩将内容从新创建的新闻 (tx_news_domain_model_news) 传输到 API。

TYPO3 版本是 6.2.11,如果我 var_dump 或尝试使用 $record->getCategories() 访问类别,它是空的。与相关文件相同,falmedia 有效。这是我的代码:

public function processDatamap_afterDatabaseOperations($status, $table, $id, array $fieldArray, \TYPO3\CMS\Core\DataHandling\DataHandler &$pObj) {
    if ($table == 'tx_news_domain_model_news' && $status == 'new') {
        $objectManager  = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
        $news           = $objectManager->get('GeorgRinger\News\Domain\Repository\NewsRepository');
        $record         = $news->findByUid($pObj->substNEWwithIDs[$id]);

希望有人知道我在这里做错了什么。我一直在尝试这个,但没有得到它。

在此先感谢您的帮助。

这可能是因为 table 中的每条记录 insertion/update 都调用了 "afterDatabaseOperations",并且记录和类别之间的关系尚未建立。

只有在完成所有 insertions/updates 之后,DataHandler 才会调用方法 processRemapStack,即 sets/fixes 各种记录之间的所有关系(例如,只要有 "NEW.."数据图中的关系,设置了正确的uid)。

您可以使用的唯一挂钩,其中所有记录具有正确的关系是 processDatamap_afterAllOperations 挂钩,您可以在 DataHandler process_datamap 的最后找到 class.

虽然那个只接受一个参数(DataHandler 实例),因此您可能必须尝试使用​​ DataHandler 参考的 "datamap" 属性 来获取插入的新闻记录。