I am writing a typo3 plugin that needs to access a database table of a pre-defined structure on a configurable MySQL / MariaDB database server. This is the model I wrote:
<?php namespace HomeinfoSysMon2DomainModel; use TYPO3CMSExtbaseDomainObjectAbstractEntity; class CheckResults extends AbstractEntity { /** * @var int $id */ public $id; /** * @var DateTime $timestamp */ public $timestamp; /** * @var int $system */ public $system; /** * @var bool $icmp_request */ public $icmp_request; /** * @var string $ssh_login */ public $ssh_login ; /** * @var string $http_request */ public $http_request; /** * @var string $application_state */ public $application_state; /** * @var string $smart_check */ public $smart_check; /** * @var string $baytrail_freeze */ public $baytrail_freeze; /** * @var string $fsck_repair */ public $fsck_repair; /** * @var bool $application_version */ public $application_version; /** * @var int $ram_total */ public $ram_total; /** * @var int $ram_free */ public $ram_free; /** * @var int $ram_available */ public $ram_available; /** * @var string $efi_mount_ok */ public $efi_mount_ok; /** * @var int $download */ public $download; /** * @var int $upload */ public $upload; /** * @var string $root_not_ro */ public $root_not_ro; /** * @var string $sensors */ public $sensors; /** * @var bool $in_sync */ public $in_sync; /** * @var int $recent_touch_events */ public $recent_touch_events; /** * @var DateTime $offline_since */ public $offline_since; /** * @var DateTime $blackscreen_since */ public $blackscreen_since; }
Of course this does not work as it stands, since Typo3 assumes the model to represent a table as defined by ext_tables.{php,sql}
within the local typo3 database.
But I want typo3 to use this model from another, configurable database server, identified by
- host name
- port
- user name
- password
How would I go about that?
I want to use as much high-level abstraction as possible and do not want to write bare SQL queries using mysqli
or the like.
Advertisement
Answer
You can have multiple databases attached to TYPO3 and establish a mapping for which tables this special new database should be used, refer to https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/Configuration/Typo3ConfVars/DB.html#tablemapping for your specific version but the example mentioned there
'Connections' => [ 'Default' => [ // ... ], 'Syslog' => [ 'charset' => 'utf8mb4', 'driver' => 'mysqli', 'dbname' => 'syslog_dbname', 'host' => 'syslog_host', 'password' => '***', 'port' => 3306, 'user' => 'syslog_user', ], ], 'TableMapping' => [ 'sys_log' => 'Syslog', ]
should give you a good glimpse. Depending on your use case it could be helpful to
- have read-only SQL access to that database so that a destructive database compare does not invalidate the foreign system.
- or have some additional TYPO3-friendly fields (e.g. uid, pid) in it which help achieving what you want.