Record objects

New in version 13.2

Record objects have been introduced as an experimental feature.

Record objects are instances of \TYPO3\CMS\Core\Domain\Record .

They are an advanced data object holding the data of a database row, taking the TCA definition and possible relations of that database row into account.

Provide Records in TypoScript

In TypoScript you can use the RecordTransformationProcessor, usually in combination with the DatabaseQueryProcessor to pass record objects to the Fluid templating engine.

Provide records in PHP

In PHP a record object can be created by the \TYPO3\CMS\Core\Domain\RecordFactory .

Use records in Fluid

In frontend templates the record object is provided by TypoScript or passed to Fluid by a PHP class.

Content element preview templates automatically receive a record object representing the record of the content element that should currently be displayed.

The Debug ViewHelper <f:debug> output of the Record object is misleading for integrators, as most properties are accessed differently as one would assume.

We are dealing with an object here. You however can access your record properties as you are used to with {record.title} or {record.uid}. In addition, you gain special, context-aware properties like the language {record.languageId} or workspace {data.versionInfo.workspaceId}.

Overview of all possibilities:

Demonstration of available variables in Fluid
<!-- Any property, which is available in the Record (like normal) -->
{record.title}
{record.uid}
{record.pid}

<!-- Language related properties -->
{record.languageId}
{record.languageInfo.translationParent}
{record.languageInfo.translationSource}

<!-- The overlaid uid -->
{record.overlaidUid}

<!-- Types are a combination of the table name and the Content Type name. -->
<!-- Example for table "tt_content" and CType "textpic": -->

<!-- "tt_content" (this is basically the table name) -->
{record.mainType}

<!-- "textpic" (this is the CType) -->
{record.recordType}

<!-- "tt_content.textpic" (Combination of mainType and record type, separated by a dot) -->
{record.fullType}

<!-- System related properties -->
{record.systemProperties.isDeleted}
{record.systemProperties.isDisabled}
{record.systemProperties.isLockedForEditing}
{record.systemProperties.createdAt}
{record.systemProperties.lastUpdatedAt}
{record.systemProperties.publishAt}
{record.systemProperties.publishUntil}
{record.systemProperties.userGroupRestriction}
{record.systemProperties.sorting}
{record.systemProperties.description}

<!-- Computed properties depending on the request context -->
{record.computedProperties.versionedUid}
{record.computedProperties.localizedUid}
{record.computedProperties.requestedOverlayLanguageId}
{record.computedProperties.translationSource} <!-- Only for pages, contains the Page model -->

<!-- Workspace related properties -->
{record.versionInfo.workspaceId}
{record.versionInfo.liveId}
{record.versionInfo.state.name}
{record.versionInfo.state.value}
{record.versionInfo.stageId}
Copied!

Using the raw record

The RecordFactory object contains only the properties, relevant for the current record type, for example CType. In case you need to access properties, which are not defined for the record type, the "raw" record can be used by accessing it via {record.rawRecord}. Those properties are not transformed.