ValueNotConvertible.php 1.12 KB
Newer Older
1 2 3 4 5 6 7
<?php

declare(strict_types=1);

namespace Doctrine\DBAL\Types\Exception;

use Doctrine\DBAL\Types\ConversionException;
Sergei Morozov's avatar
Sergei Morozov committed
8
use Throwable;
9 10 11 12 13 14 15
use function is_string;
use function sprintf;
use function strlen;
use function substr;

/**
 * Thrown when a Database to Doctrine Type Conversion fails.
Grégoire Paris's avatar
Grégoire Paris committed
16 17
 *
 * @psalm-immutable
18 19 20
 */
final class ValueNotConvertible extends ConversionException implements TypesException
{
21 22 23
    /**
     * @param mixed $value
     */
Sergei Morozov's avatar
Sergei Morozov committed
24
    public static function new($value, string $toType, ?string $message = null, ?Throwable $previous = null) : self
25 26
    {
        if ($message !== null) {
Sergei Morozov's avatar
Sergei Morozov committed
27 28 29 30
            $message = sprintf(
                'Could not convert database value to "%s" as an error was triggered by the unserialization: %s',
                $toType,
                $message
31
            );
Sergei Morozov's avatar
Sergei Morozov committed
32 33
        } else {
            $message = sprintf(
34
                'Could not convert database value "%s" to Doctrine Type "%s".',
35 36
                is_string($value) && strlen($value) > 32 ? substr($value, 0, 20) . '...' : $value,
                $toType
Sergei Morozov's avatar
Sergei Morozov committed
37 38 39 40
            );
        }

        return new self($message, 0, $previous);
41 42
    }
}