自Doctrines DBAL实施以来,我们现在可以使用不同的数据源/连接(Hooray!)。
我们现在想要使用这个新功能在TYPO3中嵌入我们的一项服务。
现在的问题是,此辅助数据库中的域模型与典型的Extbase架构不匹配。例如。它不使用int ID,也不会嵌套任何类型的父ID。
有没有人有这个用例的经验或有一个例子? 或者我是否必须设置完整的并行Doctrine ORM来处理这些模型?
答案 0 :(得分:1)
您可以尝试映射数据库字段,例如:https://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/4-use-foreign-data-sources.html
答案 1 :(得分:1)
我不确定我是否理解你的问题,但我们也有类似的情况。我们所做的是在连接中添加了第二个数据库。
LocalConfiguration.php
'DB' => [
'Connections' => [
'Default' => [
'charset' => 'utf8',
'dbname' => 'default_dbname',
'driver' => 'mysqli',
'host' => 'default_dbhost',
'password' => 'default_dbpwasswd',
'user' => 'default_dbuser',
],
'Secondary' => [
'charset' => 'utf8',
'dbname' => 'secondary_dbname',
'driver' => 'mysqli',
'host' => 'secondary_dbhost',
'password' => 'secondary_dbpasswd',
'user' => 'secondary_dbuser',
],
],
],
然后添加了一个自定义类,该类使用Query Builder
从数据库中获取数据首先必须打开与数据库的连接,然后在用于获取数据的类中为该连接创建查询构建器对象。
/**
* @var Connection
*/
private $connection;
$connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
$this->secondaryConnection = $connectionPool->getConnectionByName('Secondary');
$queryBuilder = $this->secondaryConnection->createQueryBuilder();
// now you can get the data with query statements as linked above
$statement = $queryBuilder->select('your_field')->from('your_table')->execute();
while ($row = $statement->fetch()) {
$myObjects[] = new \Vendor\Extension\Domain\Model\ExternalObject($row);
}
我将每个结果行转换为" ExternalObject"我添加的模型,它尽可能地将字段映射到我的传统Extbase对象,然后几乎可以互换地使用它们。 这取决于您在数据库中拥有的数据,以及您想要对它们执行的操作。