首页 > 解决方案 > 在 TYPO3 中包含外部表的可能方法

问题描述

由于 TYPO3 使用原则,因此可以在一个实例中使用来自多个数据库的表(有一些限制,例如 no joins)。

但是什么是可能的呢?

目前我需要两个外部表来进行扩展,而不是直接使用它们,而是像往常一样导入它们在本地工作。但进口有一些缺点。

我可以接受的回退:

对于我使用的导入,ext:external_import但存在一些问题,因为并非所有数据都可以在一次运行中导入,然后出现错误(例如,有关于重复键的报告,可惜外部表中没有重复键)

另一方面,我怀疑我可以直接使用外部表,因为它们没有通常的 TYPO3 结构(字段:'uid','pid','tstamp',...)。(也许它们可以映射在一个视图中?)(当然在我将数据导入这些字段的表中存在)

此外,外部更改可能不会被注意到,并且缓存的内容不会反映当前数据。在我的情况下,这将是一个小问题,因为我们目前已经没有“实时”数据,但是需要定期清理缓存和搜索索引(solr)。

有哪些可能的解决方案?? (它们是否依赖于 TYPO3 版本?)您的经验是什么?


编辑:

考虑到给定的答案,在尝试实现它时,会出现更多疑问:

CREATE View tx_myext_category
SELECT id as uid, name as title, ...
  FROM databasename.sys_category;

标签: typo3external-tables

解决方案


根据我的经验,映射机制只有在外部表具有与 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。查询生成器。

推荐阅读