1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
<?php
declare(strict_types=1);
namespace Doctrine\DBAL\Tests\Functional\Schema\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\Exception\InvalidFormat;
use Doctrine\DBAL\Types\Exception\InvalidType;
use Doctrine\DBAL\Types\Type;
use InvalidArgumentException;
use function is_string;
class MoneyType extends Type
{
public const NAME = 'money';
/**
* {@inheritDoc}
*/
public function getSQLDeclaration(array $column, AbstractPlatform $platform): string
{
return $platform->getDecimalTypeDeclarationSQL($column);
}
public function convertToDatabaseValue(mixed $value, AbstractPlatform $platform): ?string
{
if ($value === null) {
return null;
}
if ($value instanceof Money) {
return (string) $value;
}
throw InvalidType::new($value, self::NAME, ['null', Money::class]);
}
public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?Money
{
if ($value === null || $value instanceof Money) {
return $value;
}
if (! is_string($value)) {
throw InvalidType::new($value, self::NAME, ['null', 'string']);
}
try {
return new Money($value);
} catch (InvalidArgumentException $e) {
throw InvalidFormat::new($value, self::NAME, Money::class, $e);
}
}
}
|