0 follower

Final Class Yiisoft\Db\Pgsql\Column\TsTzMultiRangeColumn

InheritanceYiisoft\Db\Pgsql\Column\TsTzMultiRangeColumn » Yiisoft\Db\Pgsql\Column\AbstractMultiRangeColumn » Yiisoft\Db\Schema\Column\AbstractColumn

Constants

Hide inherited constants

Constant Value Description Defined By
DEFAULT_TYPE \Yiisoft\Db\Pgsql\Constant\PgsqlColumnType::TSTZMULTIRANGE Yiisoft\Db\Pgsql\Column\TsTzMultiRangeColumn

Method Details

Hide inherited methods

dbTypecast() public method
public mixed dbTypecast ( mixed $value )
$value mixed

                public function dbTypecast(mixed $value): mixed
{
    if ($value === null
        || is_string($value)
        || $value instanceof ExpressionInterface) {
        return $value;
    }
    if (!is_array($value)) {
        $this->throwWrongTypeException(gettype($value));
    }
    $rangeColumn = $this->getRangeColumn();
    $ranges = [];
    foreach ($value as $rawRange) {
        $range = $rangeColumn->dbTypecast($rawRange);
        if (!is_string($range)
            && !$range instanceof ExpressionInterface) {
            $this->throwWrongTypeException(gettype($rawRange));
        }
        $ranges[] = $range;
    }
    return new MultiRangeValue(...$ranges);
}

            
getRangeColumn() protected method

protected \Yiisoft\Db\Schema\Column\ColumnInterface getRangeColumn ( )

                protected function getRangeColumn(): ColumnInterface
{
    return new TsTzRangeColumn();
}

            
phpTypecast() public method
public mixed phpTypecast ( mixed $value )
$value mixed

                public function phpTypecast(mixed $value): mixed
{
    /**
     * @var string|null $value We expect `phpTypecast()` to only receive the value that the database returns, which
     * in this case is `null` or a `string`. To avoid extra checks.
     */
    if ($value === null) {
        return null;
    }
    if ($value === '{}') {
        return [];
    }
    if (preg_match('/^{([\[\(][^,]*,[^\)\]]*[\)\]])(?:,(?1))*}$/', $value) !== 1) {
        throw new NotSupportedException('Unsupported multirange format');
    }
    preg_match_all('/[\[\(][^,]*,[^\)\]]*[\)\]]/', $value, $matches);
    $rangeColumn = $this->getRangeColumn();
    return array_map(
        $rangeColumn->phpTypecast(...),
        $matches[0],
    );
}