我在通过 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;
}
通过命令控制器添加 mm 关系后还有什么可做的吗?