VersionPress\Utils\ReferenceUtils::getValueReferenceDetails PHP Method

getValueReferenceDetails() public static method

Returns parsed info about the value reference.
public static getValueReferenceDetails ( string $reference ) : array
$reference string
return array The details has keys 'source-column', 'source-value', 'value-column'
    public static function getValueReferenceDetails($reference)
    {
        list($keyCol, $valueColumn) = explode("@", $reference);
        list($sourceColumn, $sourceValue) = explode("=", $keyCol);
        if (strpos($sourceValue, '[') !== false) {
            list($sourceValue, $pathInStructure) = explode("[", $sourceValue, 2);
        } else {
            $pathInStructure = '';
        }
        return ['source-column' => $sourceColumn, 'source-value' => $sourceValue, 'value-column' => $valueColumn, 'path-in-structure' => $pathInStructure];
    }

Usage Example

Exemplo n.º 1
0
 public function replaceForeignKeysWithReferences($entityName, $entity)
 {
     $entityInfo = $this->schemaInfo->getEntityInfo($entityName);
     $vpIdTable = $this->schemaInfo->getPrefixedTableName('vp_id');
     foreach ($entityInfo->references as $referenceName => $targetEntity) {
         $targetTable = $this->schemaInfo->getEntityInfo($targetEntity)->tableName;
         if (isset($entity[$referenceName])) {
             if ($entity[$referenceName] > 0) {
                 $referenceVpId = $this->database->get_var("SELECT HEX(vp_id) FROM {$vpIdTable} WHERE `table` = '{$targetTable}' AND id={$entity[$referenceName]}");
             } else {
                 $referenceVpId = 0;
             }
             $entity['vp_' . $referenceName] = $referenceVpId;
             unset($entity[$referenceName]);
         }
     }
     foreach ($entityInfo->valueReferences as $referenceName => $targetEntity) {
         list($sourceColumn, $sourceValue, $valueColumn) = array_values(ReferenceUtils::getValueReferenceDetails($referenceName));
         if (isset($entity[$sourceColumn]) && $entity[$sourceColumn] == $sourceValue && isset($entity[$valueColumn])) {
             if ($entity[$valueColumn] == 0) {
                 continue;
             }
             if ($targetEntity[0] === '@') {
                 $entityNameProvider = substr($targetEntity, 1);
                 $targetEntity = call_user_func($entityNameProvider, $entity);
                 if (!$targetEntity) {
                     continue;
                 }
             }
             $targetTable = $this->schemaInfo->getEntityInfo($targetEntity)->tableName;
             $referenceVpId = $this->database->get_var("SELECT HEX(vp_id) FROM {$vpIdTable} WHERE `table` = '{$targetTable}' AND id=" . $entity[$valueColumn]);
             $entity[$valueColumn] = $referenceVpId;
         }
     }
     return $entity;
 }
All Usage Examples Of VersionPress\Utils\ReferenceUtils::getValueReferenceDetails