‪TYPO3CMS  9.5
TYPO3\CMS\Core\Database\RelationHandler Class Reference

Public Member Functions

int getWorkspaceId ()
 
 setWorkspaceId ($workspaceId)
 
bool isPurged ()
 
 start ($itemlist, $tablelist, $MMtable='', $MMuid=0, $currentTable='', $conf=[])
 
 setFetchAllFields ($allFields)
 
 setUpdateReferenceIndex ($updateReferenceIndex)
 
 setUseLiveParentIds ($useLiveParentIds)
 
 setUseLiveReferenceIds ($useLiveReferenceIds)
 
 readList ($itemlist, array $configuration)
 
 sortList ($sortby)
 
 readMM ($tableName, $uid)
 
 writeMM ($MM_tableName, $uid, $prependTableName=false)
 
 remapMM ($MM_tableName, $uid, $newUid, $prependTableName=false)
 
 readForeignField ($uid, $conf)
 
 writeForeignField ($conf, $parentUid, $updateToUid=0, $skipSorting=false)
 
array getValueArray ($prependTableName=false)
 
array getFromDB ()
 
array getResolvedItemArray ()
 
mixed countItems ($returnAsArray=true)
 
array updateRefIndex ($table, $id)
 
bool convertItemArray ()
 
bool purgeItemArray ($workspaceId=null)
 
bool processDeletePlaceholder ()
 

Static Public Member Functions

static bool isOnSymmetricSide ($parentUid, $parentConf, $childRec)
 

Public Attributes

bool $registerNonTableValues = false
 
array $tableArray = array( )
 
array $itemArray = array( )
 
array $nonTableArray = array( )
 
array $additionalWhere = array( )
 
bool $checkIfDeleted = true
 
array $dbPaths = array( )
 
string $firstTable = ''
 
string $secondTable = ''
 
bool $MM_is_foreign = false
 
string $MM_oppositeField = ''
 
string $MM_oppositeTable = ''
 
string $MM_oppositeFieldConf = ''
 
string $MM_isMultiTableRelationship = ''
 
string $currentTable
 
bool $undeleteRecord
 
array $MM_match_fields = array( )
 
bool $MM_hasUidField
 
array $MM_insert_fields = array( )
 
string $MM_table_where = ''
 
array $results = array( )
 

Protected Member Functions

bool purgeItemArrayHandler ($purgeCallback)
 
array purgeVersionedIds ($tableName, array $ids)
 
array purgeLiveVersionedIds ($tableName, array $ids)
 
array purgeDeletePlaceholder ($tableName, array $ids)
 
 removeFromItemArray ($tableName, $id)
 
array completeOppositeUsageValues ($tableName, array $referenceValues)
 
int getLiveDefaultId ($tableName, $id)
 
PlainDataResolver getResolver ($tableName, array $ids, array $sortingStatement=null)
 
Connection getConnectionForTableName (string $tableName)
 

Protected Attributes

bool $fetchAllFields = false
 
array $MM_oppositeUsage
 
bool $updateReferenceIndex = true
 
bool $useLiveParentIds = true
 
bool $useLiveReferenceIds = true
 
int $workspaceId
 
bool $purged = false
 

Detailed Description

Load database groups (relations) Used to process the relations created by the TCA element types "group" and "select" for database records. Manages MM-relations as well.

Definition at line 31 of file RelationHandler.php.

Member Function Documentation

◆ completeOppositeUsageValues()

array TYPO3\CMS\Core\Database\RelationHandler::completeOppositeUsageValues (   $tableName,
array  $referenceValues 
)
protected

Completes MM values to be written by values from the opposite relation. This method used MM insert field or MM match fields if defined.

Parameters
string$tableName‪Name of the opposite table
array$referenceValues‪Values to be written
Returns
‪array Values to be written, possibly modified

Definition at line 1599 of file RelationHandler.php.

References $GLOBALS.

Referenced by TYPO3\CMS\Core\Database\RelationHandler\writeMM().

◆ convertItemArray()

bool TYPO3\CMS\Core\Database\RelationHandler::convertItemArray ( )

Converts elements in the local item array to use version ids instead of live ids, if possible. The most common use case is, to call that prior to processing with MM relations in a workspace context. For tha special case, ids on both side of the MM relation must use version ids if available.

Returns
‪bool Whether items have been converted

Definition at line 1305 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\getResolver(), TYPO3\CMS\Core\Database\RelationHandler\getWorkspaceId(), TYPO3\CMS\Backend\Utility\BackendUtility\isTableWorkspaceEnabled(), TYPO3\CMS\Core\DataHandling\PlainDataResolver\processVersionOverlays(), TYPO3\CMS\Core\DataHandling\PlainDataResolver\setKeepDeletePlaceholder(), and TYPO3\CMS\Core\DataHandling\PlainDataResolver\setKeepMovePlaceholder().

◆ countItems()

mixed TYPO3\CMS\Core\Database\RelationHandler::countItems (   $returnAsArray = true)

Counts the items in $this->itemArray and puts this value in an array by default.

Parameters
bool$returnAsArray‪Whether to put the count value in an array
Returns
‪mixed The plain count as integer or the same inside an array

Definition at line 1263 of file RelationHandler.php.

◆ getConnectionForTableName()

◆ getFromDB()

array TYPO3\CMS\Core\Database\RelationHandler::getFromDB ( )

Reads all records from internal tableArray into the internal ->results array where keys are table names and for each table, records are stored with uids as their keys. If $this->fetchAllFields is false you can save a little memory since only uid,pid and a few other fields are selected.

Returns
‪array

Definition at line 1181 of file RelationHandler.php.

References $fields, $GLOBALS, TYPO3\CMS\Core\Database\RelationHandler\$results, TYPO3\CMS\Core\Database\RelationHandler\getConnectionForTableName(), TYPO3\CMS\Core\Database\Platform\PlatformInformation\getMaxBindParameters(), and TYPO3\CMS\Core\Database\Query\QueryHelper\stripLogicalOperatorPrefix().

◆ getLiveDefaultId()

int TYPO3\CMS\Core\Database\RelationHandler::getLiveDefaultId (   $tableName,
  $id 
)
protected

Gets the record uid of the live default record. If already pointing to the live record, the submitted record uid is returned.

Parameters
string$tableName
int$id
Returns
‪int

Definition at line 1628 of file RelationHandler.php.

References TYPO3\CMS\Backend\Utility\BackendUtility\getLiveVersionIdOfRecord().

Referenced by TYPO3\CMS\Core\Database\RelationHandler\readForeignField(), TYPO3\CMS\Core\Database\RelationHandler\readList(), and TYPO3\CMS\Core\Database\RelationHandler\writeForeignField().

◆ getResolvedItemArray()

array TYPO3\CMS\Core\Database\RelationHandler::getResolvedItemArray ( )

This method is typically called after getFromDB(). $this->results holds a list of resolved and valid relations, $this->itemArray hold a list of "selected" relations from the incoming selection array. The difference is that "itemArray" may hold a single table/uid combination multiple times, for instance in a type=group relation having multiple=true, while "results" hold each resolved relation only once. The methods creates a sanitized "itemArray" from resolved "results" list, normalized the return array to always contain both table name and uid, and keep incoming "itemArray" sort order and keeps "multiple" selections.

Returns
‪array

Definition at line 1243 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\$itemArray.

◆ getResolver()

PlainDataResolver TYPO3\CMS\Core\Database\RelationHandler::getResolver (   $tableName,
array  $ids,
array  $sortingStatement = null 
)
protected

◆ getValueArray()

array TYPO3\CMS\Core\Database\RelationHandler::getValueArray (   $prependTableName = false)

After initialization you can extract an array of the elements from the object. Use this function for that.

Parameters
bool$prependTableName‪If set, then table names will ALWAYS be prepended (unless its a _NO_TABLE value)
Returns
‪array A numeric array.

Definition at line 1155 of file RelationHandler.php.

◆ getWorkspaceId()

◆ isOnSymmetricSide()

static bool TYPO3\CMS\Core\Database\RelationHandler::isOnSymmetricSide (   $parentUid,
  $parentConf,
  $childRec 
)
static

Checks, if we're looking from the "other" side, the symmetric side, to a symmetric relation.

Parameters
string$parentUid‪The uid of the parent record
array$parentConf‪The TCA configuration of the parent field embedding the child records
array$childRec‪The record row of the child record
Returns
‪bool Returns TRUE if looking from the symmetric ("other") side to the relation.

Definition at line 1584 of file RelationHandler.php.

References TYPO3\CMS\Core\Utility\MathUtility\canBeInterpretedAsInteger().

Referenced by TYPO3\CMS\Core\Database\RelationHandler\writeForeignField().

◆ isPurged()

bool TYPO3\CMS\Core\Database\RelationHandler::isPurged ( )

Whether item array has been purged in this instance.

Returns
‪bool

Definition at line 219 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\$purged.

◆ processDeletePlaceholder()

bool TYPO3\CMS\Core\Database\RelationHandler::processDeletePlaceholder ( )

Removes items having a delete placeholder from $this->itemArray

Returns
‪bool Whether items have been purged

Definition at line 1379 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\getWorkspaceId(), and TYPO3\CMS\Core\Database\RelationHandler\purgeItemArrayHandler().

◆ purgeDeletePlaceholder()

array TYPO3\CMS\Core\Database\RelationHandler::purgeDeletePlaceholder (   $tableName,
array  $ids 
)
protected

◆ purgeItemArray()

bool TYPO3\CMS\Core\Database\RelationHandler::purgeItemArray (   $workspaceId = null)

◆ purgeItemArrayHandler()

bool TYPO3\CMS\Core\Database\RelationHandler::purgeItemArrayHandler (   $purgeCallback)
protected

Handles a purge callback on $this->itemArray

Parameters
callable$purgeCallback
Returns
‪bool Whether items have been purged

Definition at line 1394 of file RelationHandler.php.

References TYPO3\CMS\Backend\Utility\BackendUtility\isTableWorkspaceEnabled(), and TYPO3\CMS\Core\Database\RelationHandler\removeFromItemArray().

Referenced by TYPO3\CMS\Core\Database\RelationHandler\processDeletePlaceholder(), and TYPO3\CMS\Core\Database\RelationHandler\purgeItemArray().

◆ purgeLiveVersionedIds()

array TYPO3\CMS\Core\Database\RelationHandler::purgeLiveVersionedIds (   $tableName,
array  $ids 
)
protected

Purges ids that are live but have an accordant version.

Parameters
string$tableName
array$ids
Returns
‪array

Definition at line 1470 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\getConnectionForTableName(), and TYPO3\CMS\Core\Database\Platform\PlatformInformation\getMaxBindParameters().

◆ purgeVersionedIds()

array TYPO3\CMS\Core\Database\RelationHandler::purgeVersionedIds (   $tableName,
array  $ids 
)
protected

Purges ids that are versioned.

Parameters
string$tableName
array$ids
Returns
‪array

Definition at line 1424 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\getConnectionForTableName(), and TYPO3\CMS\Core\Database\Platform\PlatformInformation\getMaxBindParameters().

◆ readForeignField()

◆ readList()

TYPO3\CMS\Core\Database\RelationHandler::readList (   $itemlist,
array  $configuration 
)

◆ readMM()

TYPO3\CMS\Core\Database\RelationHandler::readMM (   $tableName,
  $uid 
)

◆ remapMM()

TYPO3\CMS\Core\Database\RelationHandler::remapMM (   $MM_tableName,
  $uid,
  $newUid,
  $prependTableName = false 
)

Remaps MM table elements from one local uid to another Does NOT update the reference index for you, must be called subsequently to do that!

Parameters
string$MM_tableName‪MM table name
int$uid‪Local, current UID
int$newUid‪Local, new UID
bool$prependTableName‪If set, then table names will always be written.

Definition at line 823 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\$MM_isMultiTableRelationship, TYPO3\CMS\Core\Database\Connection\createQueryBuilder(), TYPO3\CMS\Core\Database\RelationHandler\getConnectionForTableName(), TYPO3\CMS\Core\Database\Query\QueryBuilder\set(), TYPO3\CMS\Core\Database\Query\QueryHelper\stripLogicalOperatorPrefix(), TYPO3\CMS\Core\Database\Query\QueryBuilder\update(), and TYPO3\CMS\Core\Database\Query\QueryBuilder\where().

◆ removeFromItemArray()

TYPO3\CMS\Core\Database\RelationHandler::removeFromItemArray (   $tableName,
  $id 
)
protected

◆ setFetchAllFields()

TYPO3\CMS\Core\Database\RelationHandler::setFetchAllFields (   $allFields)

Sets $fetchAllFields

Parameters
bool$allFields‪enables fetching of all fields in getFromDB()

Definition at line 324 of file RelationHandler.php.

◆ setUpdateReferenceIndex()

TYPO3\CMS\Core\Database\RelationHandler::setUpdateReferenceIndex (   $updateReferenceIndex)

Sets whether the reference index shall be updated.

Parameters
bool$updateReferenceIndex‪Whether the reference index shall be updated

Definition at line 334 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\$updateReferenceIndex.

◆ setUseLiveParentIds()

TYPO3\CMS\Core\Database\RelationHandler::setUseLiveParentIds (   $useLiveParentIds)
Parameters
bool$useLiveParentIds

Definition at line 342 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\$useLiveParentIds.

◆ setUseLiveReferenceIds()

TYPO3\CMS\Core\Database\RelationHandler::setUseLiveReferenceIds (   $useLiveReferenceIds)
Parameters
bool$useLiveReferenceIds

Definition at line 350 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\$useLiveReferenceIds.

◆ setWorkspaceId()

TYPO3\CMS\Core\Database\RelationHandler::setWorkspaceId (   $workspaceId)

Sets the current workspace id.

Parameters
int$workspaceId

Definition at line 209 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\$workspaceId.

◆ sortList()

TYPO3\CMS\Core\Database\RelationHandler::sortList (   $sortby)

Does a sorting on $this->itemArray depending on a default sortby field. This is only used for automatic sorting of comma separated lists. This function is only relevant for data that is stored in comma separated lists!

Parameters
string$sortby‪The default_sortby field/command (e.g. 'price DESC')

Definition at line 442 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\getConnectionForTableName(), TYPO3\CMS\Core\Database\Platform\PlatformInformation\getMaxBindParameters(), and TYPO3\CMS\Core\Database\Query\QueryHelper\parseOrderBy().

Referenced by TYPO3\CMS\Core\Database\RelationHandler\start().

◆ start()

TYPO3\CMS\Core\Database\RelationHandler::start (   $itemlist,
  $tablelist,
  $MMtable = '',
  $MMuid = 0,
  $currentTable = '',
  $conf = [] 
)

Initialization of the class.

Parameters
string$itemlist‪List of group/select items
string$tablelist‪Comma list of tables, first table takes priority if no table is set for an entry in the list.
string$MMtable‪Name of a MM table.
int$MMuid‪Local UID for MM lookup
string$currentTable‪Current table name
array$conf‪TCA configuration for current field

Definition at line 234 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\$currentTable, $GLOBALS, TYPO3\CMS\Core\Database\RelationHandler\$MM_oppositeField, TYPO3\CMS\Core\Database\RelationHandler\$MM_oppositeTable, TYPO3\CMS\Core\Database\RelationHandler\purgeItemArray(), TYPO3\CMS\Core\Database\RelationHandler\readForeignField(), TYPO3\CMS\Core\Database\RelationHandler\readList(), TYPO3\CMS\Core\Database\RelationHandler\readMM(), and TYPO3\CMS\Core\Database\RelationHandler\sortList().

◆ updateRefIndex()

array TYPO3\CMS\Core\Database\RelationHandler::updateRefIndex (   $table,
  $id 
)

Update Reference Index (sys_refindex) for a record Should be called any almost any update to a record which could affect references inside the record. (copied from DataHandler)

Parameters
string$table‪Table name
int$id‪Record UID
Returns
‪array Information concerning modifications delivered by \TYPO3\CMS\Core\Database\ReferenceIndex::updateRefIndexTable()

Definition at line 1281 of file RelationHandler.php.

References TYPO3\CMS\Core\Database\RelationHandler\getWorkspaceId(), and TYPO3\CMS\Backend\Utility\BackendUtility\isTableWorkspaceEnabled().

Referenced by TYPO3\CMS\Core\Database\RelationHandler\writeForeignField(), and TYPO3\CMS\Core\Database\RelationHandler\writeMM().

◆ writeForeignField()

TYPO3\CMS\Core\Database\RelationHandler::writeForeignField (   $conf,
  $parentUid,
  $updateToUid = 0,
  $skipSorting = false 
)

◆ writeMM()

Member Data Documentation

◆ $additionalWhere

array TYPO3\CMS\Core\Database\RelationHandler::$additionalWhere = array( )

Definition at line 66 of file RelationHandler.php.

Referenced by TYPO3\CMS\Core\Database\RelationHandler\writeMM().

◆ $checkIfDeleted

bool TYPO3\CMS\Core\Database\RelationHandler::$checkIfDeleted = true

Deleted-column is added to additionalWhere... if this is set...

Definition at line 72 of file RelationHandler.php.

◆ $currentTable

string TYPO3\CMS\Core\Database\RelationHandler::$currentTable

◆ $dbPaths

array TYPO3\CMS\Core\Database\RelationHandler::$dbPaths = array( )

Definition at line 76 of file RelationHandler.php.

◆ $fetchAllFields

bool TYPO3\CMS\Core\Database\RelationHandler::$fetchAllFields = false
protected

$fetchAllFields if false getFromDB() fetches only uid, pid, thumbnail and label fields (as defined in TCA)

Definition at line 37 of file RelationHandler.php.

◆ $firstTable

string TYPO3\CMS\Core\Database\RelationHandler::$firstTable = ''

Will contain the first table name in the $tablelist (for positive ids)

Definition at line 82 of file RelationHandler.php.

Referenced by TYPO3\CMS\Core\Database\RelationHandler\readList(), TYPO3\CMS\Core\Database\RelationHandler\readMM(), and TYPO3\CMS\Core\Database\RelationHandler\writeMM().

◆ $itemArray

array TYPO3\CMS\Core\Database\RelationHandler::$itemArray = array( )

Contains items in an numeric array (table/id for each). Tablenames here might be "_NO_TABLE"

Definition at line 56 of file RelationHandler.php.

Referenced by TYPO3\CMS\Core\Database\RelationHandler\getResolvedItemArray().

◆ $MM_hasUidField

bool TYPO3\CMS\Core\Database\RelationHandler::$MM_hasUidField

This is set to TRUE if the MM table has a UID field.

Definition at line 145 of file RelationHandler.php.

◆ $MM_insert_fields

array TYPO3\CMS\Core\Database\RelationHandler::$MM_insert_fields = array( )

Array of fields and value pairs used for insert in MM table

Definition at line 151 of file RelationHandler.php.

Referenced by TYPO3\CMS\Core\Database\RelationHandler\writeMM().

◆ $MM_is_foreign

bool TYPO3\CMS\Core\Database\RelationHandler::$MM_is_foreign = false

If TRUE, uid_local and uid_foreign are switched, and the current table is inserted as tablename - this means you display a foreign relation "from the opposite side"

Definition at line 95 of file RelationHandler.php.

◆ $MM_isMultiTableRelationship

string TYPO3\CMS\Core\Database\RelationHandler::$MM_isMultiTableRelationship = ''

Is empty by default; if MM_is_foreign is set and there is more than one table allowed (on the "local" side), then it contains the first table (as a fallback)

Definition at line 119 of file RelationHandler.php.

Referenced by TYPO3\CMS\Core\Database\RelationHandler\remapMM(), and TYPO3\CMS\Core\Database\RelationHandler\writeMM().

◆ $MM_match_fields

array TYPO3\CMS\Core\Database\RelationHandler::$MM_match_fields = array( )

Array of fields value pairs that should match while SELECT and will be written into MM table if $MM_insert_fields is not set

Definition at line 139 of file RelationHandler.php.

◆ $MM_oppositeField

string TYPO3\CMS\Core\Database\RelationHandler::$MM_oppositeField = ''

Field name at the "local" side of the MM relation

Definition at line 101 of file RelationHandler.php.

Referenced by TYPO3\CMS\Core\Database\RelationHandler\start().

◆ $MM_oppositeFieldConf

string TYPO3\CMS\Core\Database\RelationHandler::$MM_oppositeFieldConf = ''

Only set if MM_is_foreign is set

Definition at line 113 of file RelationHandler.php.

◆ $MM_oppositeTable

string TYPO3\CMS\Core\Database\RelationHandler::$MM_oppositeTable = ''

Only set if MM_is_foreign is set

Definition at line 107 of file RelationHandler.php.

Referenced by TYPO3\CMS\Core\Database\RelationHandler\readMM(), and TYPO3\CMS\Core\Database\RelationHandler\start().

◆ $MM_oppositeUsage

array TYPO3\CMS\Core\Database\RelationHandler::$MM_oppositeUsage
protected

Usage of a MM field on the opposite relation.

Definition at line 163 of file RelationHandler.php.

◆ $MM_table_where

string TYPO3\CMS\Core\Database\RelationHandler::$MM_table_where = ''

Extra MM table where

Definition at line 157 of file RelationHandler.php.

◆ $nonTableArray

array TYPO3\CMS\Core\Database\RelationHandler::$nonTableArray = array( )

Array for NON-table elements

Definition at line 62 of file RelationHandler.php.

◆ $purged

bool TYPO3\CMS\Core\Database\RelationHandler::$purged = false
protected

◆ $registerNonTableValues

bool TYPO3\CMS\Core\Database\RelationHandler::$registerNonTableValues = false

If set, values that are not ids in tables are normally discarded. By this options they will be preserved.

Definition at line 43 of file RelationHandler.php.

◆ $results

array TYPO3\CMS\Core\Database\RelationHandler::$results = array( )

This array will be filled by getFromDB().

Definition at line 189 of file RelationHandler.php.

Referenced by TYPO3\CMS\Core\Database\RelationHandler\getFromDB().

◆ $secondTable

string TYPO3\CMS\Core\Database\RelationHandler::$secondTable = ''

Will contain the second table name in the $tablelist (for negative ids)

Definition at line 88 of file RelationHandler.php.

◆ $tableArray

array TYPO3\CMS\Core\Database\RelationHandler::$tableArray = array( )

Contains the table names as keys. The values are the id-values for each table. Should ONLY contain proper table names.

Definition at line 50 of file RelationHandler.php.

◆ $undeleteRecord

bool TYPO3\CMS\Core\Database\RelationHandler::$undeleteRecord

If a record should be undeleted (so do not use the $useDeleteClause on \TYPO3\CMS\Backend\Utility\BackendUtility)

Definition at line 132 of file RelationHandler.php.

Referenced by TYPO3\CMS\Core\Database\RelationHandler\readForeignField().

◆ $updateReferenceIndex

bool TYPO3\CMS\Core\Database\RelationHandler::$updateReferenceIndex = true
protected

◆ $useLiveParentIds

bool TYPO3\CMS\Core\Database\RelationHandler::$useLiveParentIds = true
protected

◆ $useLiveReferenceIds

bool TYPO3\CMS\Core\Database\RelationHandler::$useLiveReferenceIds = true
protected

◆ $workspaceId