2017-09-21 4 views
0

Depuis la mise en œuvre de Doctrines DBAL, nous pouvons maintenant utiliser différentes sources de données/connexions (Hourra!).TYPO3 Extension ne correspond pas au schéma d'Extbase

Nous aimerions maintenant intégrer un de nos services dans TYPO3 en utilisant cette nouvelle fonctionnalité.

Le problème est maintenant, que les modèles de domaine dans cette base de données secondaire ne correspondent pas au schéma typique d'Extbase. Par exemple. il n'utilise pas d'ID int et ces modèles ne sont imbriqués par aucun type d'ID parent.

Est-ce que quelqu'un a des expériences avec ce cas d'utilisation ou a un exemple? Ou dois-je configurer un ORM Doctrine parallèle complet pour gérer ces modèles?

Répondre

1

Je ne suis pas sûr d'avoir compris votre question, mais nous avons eu un cas similaire. Ce que nous avons fait, c'est que nous avons ajouté la deuxième base de données dans les connexions.

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', 
      ], 
     ], 
    ], 

ensuite ajouté une classe personnalisée qui obtient les données de la base de données avec le Query Builder

Vous devez d'abord ouvrir une connexion à votre base de données, puis créez une requête Builder objet pour cette connexion dans la classe que vous utilisez pour obtenir les données.

/** 
* @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); 
} 

Je jette chaque ligne de résultat à un modèle « ExternalObject » que j'ajouté, il cartographié les champs aussi près que possible de mes objets Extbase conventionnels et a été en mesure de les utiliser de façon presque interchangeable. Cela dépend des données que vous avez dans votre base de données, et des choses que vous voulez faire avec elles.

+0

Bonne idée. J'étais trop concentré sur la cartographie des relations et la persistance, alors j'ai oublié d'utiliser des DAO simples et de les hydrater manuellement. Puisque Typo3 est simplement utilisé pour filtrer et visualiser les modèles, il n'y a pas vraiment besoin d'un ORM complet. – Inceddy