【问题标题】:extbase how to switch database underneathextbase下如何切换数据库
【发布时间】:2015-12-03 16:40:10
【问题描述】:

我们有一个使用 2015 年数据的扩展程序。2016 年将有同样的游戏,没有结构变化。在扩展中,我希望有一个开关来更改数据库 extbase 从中获取数据。

任何输入如何实现这一点?

谢谢。

【问题讨论】:

    标签: extbase typo3-7.x


    【解决方案1】:

    前面给出的关于“使用外部数据源”的答案只是解决了同一数据库内的映射方面,以及作为域驱动设计上下文中对象关系映射的变体的单表继承。

    如果想使用不同的数据库连接甚至不同的 DBMS,给定的 Extbase 场景有三种可能性。

    1. 使用允许配置额外连接的数据库抽象层

      • 到TYPO3 CMS 7,你必须安装系统扩展dbal配置 替代连接并在您的源代码中使用它 - 请参阅 DBAL documentation 了解详情 - 如果使用 不同的 DBMS,如 Oracle 或 PostgreSQL,但如果两者都可以正常工作 数据库基于 MySQL(或 MariaDB)
      • 使用 TYPO3 CMS 8,您可以使用 Doctrine DBAL,它允许 为每个数据库表配置不同的连接。如果名称 两个数据库中的表相同,您需要获取Connection 对象,分别使用 ConnectionPool - 见TYPO3 documentation on Doctrine DBAL 详情
    2. 使用与第二个数据库不同名称的VIEW

      • 在基础架构级别创建VIEW 并为表提供 当前数据库中的不同表名 - 这是一种 解决方法,但确保在您的第二次修改表 数据库自动反映在数据库VIEW
      • 利用上一篇文章中提到的 TypoScript 映射到 使用不同的名称将您的域模型连接到数据库 VIEW
    3. 重载类Typo3DbBackend作为最后的手段

      • 这个类负责实际执行数据库查询 Extbase 应用程序上下文

      • 你可以整合一个策略模式来使用 默认实现或使用您的自定义第二个数据库连接 可以通过ext_localconf.php 定义重载,例如

          $extbaseObjectContainer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class);
          $extbaseObjectContainer->registerImplementation(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\BackendInterface::class, \TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbBackend::class);
        

    【讨论】:

    【解决方案2】:

    除了按照惯例从模型名称派生的表之外,还可以将模型映射到其他表。

    例子:

    plugin.tx_myextension {
        persistence {
            classes {
                Tx_MyExtension_Domain_Model_Person {
                    mapping {
                        tableName = tt_address
                        recordType = Tx_MyExtension_Domain_Model_Person
                        columns {
                            birthday.mapOnProperty = dateOfBirth
                            street.mapOnProperty = thoroughfare
                        }
                    }
                }
            }
        }
    }
    

    如果您只想切换表,则可以省略示例中的列映射。

    更多信息可在文档中找到: https://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/4-use-foreign-data-sources.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2014-08-28
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      相关资源
      最近更新 更多