Mapping data¶
In the Administration chapter, you will find explanations about how to map the data from the external source to existing or newly created tables in the TYPO3 CMS database. There are two mandatory conditions for this operation to succeed:
- the external data must have the equivalent of a primary key
- this primary key must be stored into some column of the TYPO3 CMS database, but not the uid column which is internal to TYPO3 CMS.
The primary key in the external data is the key that will used to decide whether a given entry in the external data corresponds to a record already stored in the TYPO3 CMS database or if a new record should be created for that entry. Records in the TYPO3 CMS database that do not match primary keys in the external data can be deleted if desired.
Mapping MM relations¶
Mapping relations is more tricky that simple values and MM relations even more so. The explanation of the properties in the Administration chapter will help, as will the External Import Tutorial.
However there are some fundamental concepts to understand to be able to use those features in an optimal way.
External Import saves the imported data using the
\TYPO3\CMS\Core\DataHandling\DataHandler
class
This implies that the data is
arranged in a particular structure that is later transformed
into SQL statement by the TYPO3 CMS Core, but not by
External Import itself. This is important to understand, because
it has an impact on how MM relations are handled.
Whenever a record from a given table has relations to one or more records from another table, that list of records is described in the DataHandler structure as a simple comma-separated list of identifiers. This means that External Import does not need to know about all the details of the MM relation. It can just send a comma-separated list of identifiers and DataHandler will sort it out using the TCA configuration.
This means that it is not absolutely necessary to use the MM configuration properties, just because the TCA configuration refers to a MM table.
What the MM configuration properties imply first and foremost is that the external data should be considered as being denormalized. Indeed in a “non-MM” import process, several external records with the same external key will overwrite each other, the last one being the one that is actually imported. However when a MM configuration is active, the foreign key in each such record will be preserved and used to define the many relations of that record.
Consider the following external data:
Table A
External primary key | Title |
---|---|
x3 | X-Three |
y4 | Y-Four |
Table B
External primary key | Name | External foreign key |
---|---|---|
01 | Foo | x3 |
01 | Foo | y4 |
02 | Bar | x3 |
Table A is imported first and contains two records.
Table B is imported next. Two of the external records have
the same external primary key. Thus - after import - the
table will contain only two records. However, because we declared
a MM relation between Table A and Table B, the relations
to both x3
and y4
will be preserved for
record 01
. Otherwise, the second entry would have
overwritten the first one and record 01
would have had
a single relation (to y4
).
I hope this is not too confusing, I’m finding it hard to explain…