0

由于 Doctrines DBAL 的实现,我们现在可以使用不同的数据源/连接(万岁!)。

我们现在想使用这个新功能在 TYPO3 中嵌入我们的一项服务。

现在的问题是,这个辅助数据库中的域模型与典型的 Extbase 模式不匹配。例如,它不使用 int ID,也不使用任何类型的父 ID 嵌套这些模型。

有没有人有这个用例的经验或有一个例子?还是我必须设置一个完整的并行 Doctrine ORM 来处理这些模型?

4

2 回答 2

1

您可以尝试映射您的数据库字段,如下所示:https ://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/4-use-foreign-data-sources.html

于 2017-09-21T10:59:38.433 回答
1

我不确定我是否正确理解了您的问题,但我们有类似的情况。我们所做的是在连接中添加了第二个数据库。

本地配置.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 对象,然后几乎可以互换使用它们。这取决于您在数据库中拥有的数据,以及您想用它们做的事情。

于 2017-09-21T15:25:54.137 回答