我们有一个使用2015年数据的扩展程序。2016年将有相同的游戏,没有结构变化。在扩展中我希望有一个开关来改变数据库extbase从中获取数据。
任何输入如何实现这一目标?
谢谢。答案 0 :(得分:2)
之前给出的关于“使用外部数据源”的答案仅解决了同一数据库中的映射方面,也解决了单表继承方面作为域驱动设计上下文中对象关系映射的变体。
如果想要使用不同的数据库连接甚至不同的DBMS,给定的Extbase场景有三种可能性。
使用允许配置其他连接的数据库抽象层
dbal
configure
替代连接并在源代码中使用它 - 请参阅
DBAL documentation了解详细信息 - 使用a时会出现问题
不同的DBMS,如Oracle或PostgreSQL,但如果两者都可以正常工作
数据库基于MySQL(或MariaDB)Connection
object,代表第二个数据库单独使用
ConnectionPool
- 请参阅TYPO3 documentation on Doctrine DBAL
细节使用名称与第二个数据库不同的VIEW
VIEW
并提供表格
当前数据库中的一个不同的表名 - 这是一种
解决方法,但确保在第二个表中修改表
数据库自动反映在数据库VIEW
VIEW
作为最后的手段重载课程Typo3DbBackend
您可以将策略模式集成到使用
默认实现或使用自定义第二个数据库连接
可以通过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);
答案 1 :(得分:0)
根据惯例,可以将模型映射到除模型名称派生的表之外的其他表。
示例:
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