添加了命令控制器的 MM 关系未在后端字段中显示

MM relation which is added with command controller not shown in backend field

我在 TYPO3 中通过命令控制器添加 mm 关系时遇到了一些问题。

我尝试将页面的作者字段(通常是 varchar 字段以填充字符串)迁移到 fe_users 的 mm 关系。在我的数据库中,mm 关系已正确添加,但在后端,作者字段中未显示所选 fe_users。

我尝试通过命令控制器中的数据处理程序脚本添加它们(我之前也尝试过使用查询生成器添加它们,但同样的问题):

/**
 * @var array
 */
protected $mappingUsers = [
    'Max Mustermann' => 2,
    'Miri Musterfrau' => 5
];

public function execute(InputInterface $input, OutputInterface $output)
{
    /** @var ConnectionPool $connectionPool */
    $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);

    /** @var QueryBuilder $queryBuilderPages */
    $queryBuilderPages = $connectionPool->getQueryBuilderForTable('pages');

    /** @var QueryBuilder $queryBuilderAuthor */
    $queryBuilderAuthor = $connectionPool->getQueryBuilderForTable('tx_project_pages_author_mm');

    $pages = $queryBuilderPages
        ->from('pages')
        ->select('*')
        ->execute()
        ->fetchAll();

    /** @var DataHandler $dataHandler */
    $dataHandler = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\DataHandling\DataHandler::class);
    $data = [];

    foreach ($pages as $page) {
        if ($page['author']) {
            foreach ($this->mappingUsers as $key => $value) {
                if ($page['author'] === $key) {
                    $data = [
                        'pages' => [
                            $page['uid'] => [
                                'author' => $value,
                                'tstamp' => time(),
                            ]
                        ],
                        'tx_project_pages_author_mm' => [
                            str_replace(' ', '', 'NEW' . microtime() . rand()) => [
                                'uid_local' => $page['uid'],
                                'uid_foreign' => $value
                            ]
                        ]
                    ];

                    $dataHandler->start($data, []);
                    $dataHandler->process_datamap();

                    unset($data);
                }
            }
        }
    }

    $queryBuilderPages
        ->update('pages')
        ->where(
            $queryBuilderPages->expr()->eq('author', "''"),
        )
        ->set('author', 0)
        ->execute();

    return 0;
}

通过command controller添加mm关系后还有什么要做的吗?

总的来说上面的脚本是有效的。只是数据库结构出错了。

但是建议实施后端用户身份验证,以便能够在 运行 命令后删除缓存例如:

    public function execute(InputInterface $input, OutputInterface $output)
    {
        Bootstrap::initializeBackendAuthentication();