由于 Doctrines DBAL 的实现,我们现在可以使用不同的数据源/连接(万岁!)。
我们现在想使用这个新功能在 TYPO3 中嵌入我们的一项服务。
现在的问题是,这个辅助数据库中的域模型与典型的 Extbase 模式不匹配。例如,它不使用 int ID,也不使用任何类型的父 ID 嵌套这些模型。
有没有人有这个用例的经验或有一个例子?还是我必须设置一个完整的并行 Doctrine ORM 来处理这些模型?
您可以尝试映射您的数据库字段,如下所示:https ://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/4-use-foreign-data-sources.html
我不确定我是否正确理解了您的问题,但我们有类似的情况。我们所做的是在连接中添加了第二个数据库。
本地配置.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',
],
],
],
然后添加了一个自定义类,该类使用查询生成器从数据库中获取数据
您首先必须打开与数据库的连接,然后在用于获取数据的类中为该连接创建一个查询构建器对象。
/**
* @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 对象,然后几乎可以互换使用它们。这取决于您在数据库中拥有的数据,以及您想用它们做的事情。