typo3 - 使用命令控制器添加的 MM 关系未显示在后端字段中
问题描述
我在通过 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 关系后还有什么可做的吗?
解决方案
一般来说,上面的脚本有效。只是数据库结构中出现了错误。
但是建议实现后端用户身份验证,以便能够在运行命令后删除缓存,例如:
public function execute(InputInterface $input, OutputInterface $output)
{
Bootstrap::initializeBackendAuthentication();
推荐阅读
- c++ - C++ 编译器如何在 C++17 中实现折叠表达式?
- java - Minecraft 函数文件结构
- r - 如何使用 ggplot2 在轴上使用科学记数法固定小数位数?
- java - 如何使用 java 类选择并写入外部 Windows 控制台
- node.js - npm install bootstrap@4.0.0 命令给出 ENETUNREACH 错误
- python - 如何编码分类预测值?
- java - 根据字符串的不同模式拆分字符串
- json - 我有嵌套的列表对象,称为 JSON 中的剧集,那么如何根据 id 父对象而不是位置对象获取剧集列表?
- python - 数据框中的字符串编辑不使用 .replace 代码生效
- django - 如何使用 django.utils.timezone 库将日期时间从特定时区转换为其 UTC 版本?