LeanMapper\Reflection\PropertyFactory::createRelationship PHP Method

createRelationship() private static method

private static createRelationship ( string $sourceClass, PropertyType $propertyType, string $relationshipType, string | null $definition = null, LeanMapper\IMapper $mapper = null ) : mixed
$sourceClass string
$propertyType PropertyType
$relationshipType string
$definition string | null
$mapper LeanMapper\IMapper
return mixed
    private static function createRelationship($sourceClass, PropertyType $propertyType, $relationshipType, $definition = null, IMapper $mapper = null)
    {
        if ($relationshipType !== 'hasOne') {
            $strategy = Result::STRATEGY_IN;
            // default strategy
            if ($definition !== null and substr($definition, -6) === '#union') {
                $strategy = Result::STRATEGY_UNION;
                $definition = substr($definition, 0, -6);
            }
        }
        $pieces = array_replace(array_fill(0, 6, ''), $definition !== null ? explode(':', $definition) : []);
        $sourceTable = $mapper !== null ? $mapper->getTable($sourceClass) : null;
        $targetTable = $mapper !== null ? $mapper->getTable($propertyType->getType()) : null;
        switch ($relationshipType) {
            case 'hasOne':
                $relationshipColumn = $mapper !== null ? $mapper->getRelationshipColumn($sourceTable, $targetTable) : self::getSurrogateRelationshipColumn($propertyType);
                return new Relationship\HasOne($pieces[0] ?: $relationshipColumn, $pieces[1] ?: $targetTable);
            case 'hasMany':
                return new Relationship\HasMany($pieces[0] ?: ($mapper !== null ? $mapper->getRelationshipColumn($mapper->getRelationshipTable($sourceTable, $targetTable), $sourceTable) : null), $pieces[1] ?: ($mapper !== null ? $mapper->getRelationshipTable($sourceTable, $targetTable) : null), $pieces[2] ?: ($mapper !== null ? $mapper->getRelationshipColumn($mapper->getRelationshipTable($sourceTable, $targetTable), $targetTable) : null), $pieces[3] ?: $targetTable, $strategy);
            case 'belongsToOne':
                $relationshipColumn = $mapper !== null ? $mapper->getRelationshipColumn($targetTable, $sourceTable) : $sourceTable;
                return new Relationship\BelongsToOne($pieces[0] ?: $relationshipColumn, $pieces[1] ?: $targetTable, $strategy);
            case 'belongsToMany':
                $relationshipColumn = $mapper !== null ? $mapper->getRelationshipColumn($targetTable, $sourceTable) : $sourceTable;
                return new Relationship\BelongsToMany($pieces[0] ?: $relationshipColumn, $pieces[1] ?: $targetTable, $strategy);
        }
        return null;
    }