typo3 - 在 TYPO3 中包含外部表的可能方法
问题描述
由于 TYPO3 使用原则,因此可以在一个实例中使用来自多个数据库的表(有一些限制,例如 no joins
)。
但是什么是可能的呢?
目前我需要两个外部表来进行扩展,而不是直接使用它们,而是像往常一样导入它们在本地工作。但进口有一些缺点。
我可以接受的回退:
- 数据不是实时的(对外部表的更改稍后导入)
- 数据是只读的(无论如何更改都是在外部完成的)
对于我使用的导入,ext:external_import
但存在一些问题,因为并非所有数据都可以在一次运行中导入,然后出现错误(例如,有关于重复键的报告,可惜外部表中没有重复键)
另一方面,我怀疑我可以直接使用外部表,因为它们没有通常的 TYPO3 结构(字段:'uid','pid','tstamp',...)。(也许它们可以映射在一个视图中?)(当然在我将数据导入这些字段的表中存在)
此外,外部更改可能不会被注意到,并且缓存的内容不会反映当前数据。在我的情况下,这将是一个小问题,因为我们目前已经没有“实时”数据,但是需要定期清理缓存和搜索索引(solr)。
有哪些可能的解决方案?? (它们是否依赖于 TYPO3 版本?)您的经验是什么?
编辑:
考虑到给定的答案,在尝试实现它时,会出现更多疑问:
- 这些表是只读的(因为它们是从外部更改的):
如何将其声明为 TYPO3? - 这些表不遵循通常的命名规则,特别是一个表的命名
sys_category
方式与 TYPO3 表冲突sys_category
。
我可以在 TYPO3 中构建映射吗? - 我可以从 TYPO3 构建一个视图来重命名表和字段吗?
喜欢:
CREATE View tx_myext_category
SELECT id as uid, name as title, ...
FROM databasename.sys_category;
解决方案
根据我的经验,映射机制只有在外部表具有与 TYPO3 表几乎相似的结构时才有效。您至少需要在uid
外部有一个字段。这不能映射!如果需要pid
,也可以在 TYPO3 端管理crdate
缺失的字段。tstamp
只需用 TYPO3 需要的值填充本地数据数组。
如果你有关系要处理,就会出现问题。许多外部系统有其他方式来处理关系。如果您尝试仅依赖映射机制,您可能会遇到很多问题。
其他问题是日期格式的字段。MS 世界中的大多数外部表都使用另一种格式作为 unixtime。
如果您在映射机制上遇到问题,您可以切换到 TYPO3 queryBuilder。这是一个强大的后备。我只遇到了特殊类型的 JOIN 语句的问题。
但是使用 TYPO3 queryBuilder,您就得靠自己了。您将 queryBuilder 代码的实例放置在存储库中并像往常一样添加模型代码:因此您可以像以前一样继续在前端使用 Fluid。
编辑答案:
- 使用 TYPO3 queryBuilder 只读表不是问题。只是不要在你的模型中实现 setter 类。
- 使用 TYPO3 queryBuilder,您可以使用任何名称调用任何外部表。您可以完全控制存储库中的输出数据,因为映射是在其中处理的。
- 据我所知,没有办法在 TYPO3 到 v9 中创建 SQL 视图,无论是使用 DBAL 映射机制还是使用 TYPO3。查询生成器。
推荐阅读
- android - Android Kotlin - 加载 ImageView 内的图像
- python - 如何修复 KeyError:'axes.color_cycle 不是有效的 rc 参数(有关有效参数列表,请参阅 rcParams.keys())'
- android - 在 Flutter SDK 中找不到 Dart
- javascript - 在没有内置函数的情况下删除 JavaScript 数组项?
- azure - 适用于 Databricks、Synapse 和 ADLS gen2 的数据治理解决方案
- angular - 从 Angular Universal 禁用内联 CSS
- javascript - ml5.js 给出:无法读取 featureExtractor.regression.train for video (ML5.JS) 上未定义的属性“形状”
- python - 在世界地图上显示数据框中位置的频率
- php - 如何在 Laravel 中将 PNG img 转换为 JPG img
- python - 通过 SSIS 派生列后的 0 行数据到数据库