ext_tables.sql
-- optional
The ext_
file in the root folder of an extension holds
additional SQL definition of database tables.
This file should contain a table-structure dump of the tables used by the extension which are not auto-generated. It is used for evaluation of the database structure and is applied to the database when an extension is enabled.
If you add additional fields (or depend on certain fields) to existing tables
you can also put them here. In this case insert a CREATE TABLE
structure
for that table, but remove all lines except the ones defining the fields you
need. Here is an example adding a column to the pages table:
CREATE TABLE pages (
tx_myextension_field int(11) DEFAULT '0' NOT NULL,
);
TYPO3 will merge this table definition to the existing table definition when
comparing expected and actual table definitions (for example, via the
Admin Tools > Maintenance > Analyze Database Structure or the
CLI command extension:
. Partial
definitions can also contain indexes and other directives. They can also change
existing table fields - but that is not recommended, because it may
create problems with the TYPO3 Core and/or other extensions.
The ext_
file may not necessarily be "dumpable" directly to
a database (because of the semi-complete table definitions allowed that
define only required fields). But the extension manager or admin tools can
handle this.
TYPO3 parses ext_
files. TYPO3 expects that all
table definitions in this file look like the ones produced by the
mysqldump
utility. Incorrect definitions may not be recognized
by the TYPO3 SQL parser or may lead to SQL errors, when TYPO3 tries
to apply them. If TYPO3 is not running on MySQL or a directly compatible
other DBMS like MariaDB, the system will
parse the file towards the target DBMS like PostgreSQL or SQLite.
Auto-generated structure
The database schema analyzer automatically creates TYPO3 "management"-related
database columns by reading a table's TCA and checking the Table properties (ctrl)
section for table capabilities. Field definitions in ext_
take
precedence over automatically generated fields, so the TYPO3 Core never
overrides a manually specified column definition from an ext_
file.
Note
New in version 13.0
As column definitions are created automatically from the TCA configuration,
the ext_
file can end up with a table definition without
columns, like:
CREATE TABLE tx_myextension_domain_model_table (
);
This would be invalid as such in most
DBMS, since tables usually must have
at least one column. However, it is a valid definition in the scope of
ext_
files when the TYPO3 Core enriches fields from TCA.
Also, you can omit the CREATE TABLE
statement without columns
entirely.
These columns below are automatically added if not defined in
ext_
for database tables that provide a $GLOBALS
definition:
uid
andPRIMARY KEY
- If the
uid
field is not provided inside theext_
file, thetables. sql PRIMARY KEY
constraint must be omitted, too. pid
andKEY parent
- The column
pid
isunsigned
, if the table is not workspace-aware, the default indexparent
includespid
andhidden
as well asdeleted
, if the latter two are specified in TCA's Table properties (ctrl). The parent index creation is only applied, if the columnpid
is auto-generated, too.
The following $GLOBALS['TCA']['ctrl'] are considered for
auto-generated fields, if they are not manually defined in the
ext_
file:
['ctrl']
['tstamp'] = 'my_ field_ name' - Often set to
tstamp
orupdatedon
. ['ctrl']
['crdate'] = 'my_ field_ name' - Often set to
crdate
orcreatedon
. ['ctrl']
['delete'] = 'my_ field_ name' - Often set to
deleted
. ['ctrl']
['enablecolumns'] ['disabled'] = 'my_ field_ name' - Often set to
hidden
ordisabled
. ['ctrl']
['enablecolumns'] ['starttime'] = 'my_ field_ name' - Often set to
starttime
. ['ctrl']
['enablecolumns'] ['endtime'] = 'my_ field_ name' - Often set to
endtime
. ['ctrl']
['enablecolumns'] ['fe_ group'] = 'my_ field_ name' - Often set to
fe_
.group ['ctrl']
['sortby'] = 'my_ field_ name' - Often set to
sorting
. ['ctrl']
['description Column'] = 'my_ field_ name' - Often set to
description
. ['ctrl']
['editlock'] = 'my_ field_ name' - Often set to
editlock
. ['ctrl']
['language Field'] = 'my_ field_ name' - Often set to
sys_
.language_ uid ['ctrl']
['trans Orig Pointer Field'] = 'my_ field_ name' - Often set to
l10n_
.parent ['ctrl']
['translation Source'] = 'my_ field_ name' - Often set to
l10n_
.source l10n_
state - Column added if
['ctrl']
and['language Field'] ['ctrl']
are set.['trans Orig Pointer Field'] ['ctrl']
['orig Uid'] = 'my_ field_ name' - Often set to
t3_
.origuid ['ctrl']
['trans Orig Diff Source Field'] = 'my_ field_ name' - Often set to
l10n_
.diffsource ['ctrl']
and['versioning WS'] = true t3ver_*
columns- Columns that make a table workspace-aware. All
those fields are prefixed with
t3ver_
, for examplet3ver_
. A default index namedoid t3ver_
to fieldsoid t3ver_
andoid t3ver_
is added, too.wsid
The configuration in $GLOBALS['TCA'][$table]['columns'][$field]['config']['MM'] is considered for auto-generating the intermediate table and fields for:
The following types configured via
$GLOBALS['TCA'][$table]['columns'][$field]['config']
are considered for auto-generated fields, if they are not manually defined in
the ext_
file:
- TCA type "category" (since TYPO3 v12.0)
- TCA type "check" (since TYPO3 v13.0)
- TCA type "color" (since TYPO3 v13.0)
- TCA type "datetime"
- TCA type "email" (since TYPO3 v13.0)
- TCA type "file" (since TYPO3 v13.0)
- TCA type "flex" (since TYPO3 v13.0)
- TCA type "folder" (since TYPO3 v13.0)
- TCA type "group" (since TYPO3 v13.0)
- TCA type "imageManipulation" (since TYPO3 v13.0)
- TCA type "inline" (since TYPO3 v13.0)
- TCA type "json"
- TCA type "language" (since TYPO3 v13.0)
- TCA type "link" (since TYPO3 v13.0)
- TCA type "number" (since TYPO3 v13.0)
- TCA type "password" (since TYPO3 v13.0)
- TCA type "radio" (since TYPO3 v13.0)
- TCA type "select" (since TYPO3 v13.0)
- TCA type "slug" (since TYPO3 v12.0)
- TCA type "text" (since TYPO3 v13.0)
- TCA type "uuid"