gpt4 book ai didi

extbase下如何切换数据库

转载 作者:行者123 更新时间:2023-12-02 04:15:29 24 4
gpt4 key购买 nike

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

有什么意见可以实现这一点吗?

谢谢。

最佳答案

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

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

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

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

    • 在基础设施级别创建一个 VIEW 并为表提供当前数据库中的不同表名 - 这是一种解决方法,但确保在第二个中对表进行修改数据库自动反射(reflect)到数据库 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);

关于extbase下如何切换数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34071454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com