<?php
/**
* Created by simpson <simpsonwork@gmail.com>
* Date: 11.10.2019
* Time: 15:26
*/
namespace AngelGamez\TranslatableBundle\Doctrine\DBAL\Types;
use AngelGamez\TranslatableBundle\Entity\TranslatableValue;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\Type;
class TranslatableType extends Type
{
const NAME = 'translatable';
/**
* @inheritDoc
*/
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return $platform->getJsonTypeDeclarationSQL($fieldDeclaration);
}
/**
* @inheritDoc
*/
public function getName()
{
return self::NAME;
}
/**
* @param \AngelGamez\TranslatableBundle\Entity\TranslatableValue|null $value
* @param AbstractPlatform $platform
*
* @return null|string
*/
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
if (null === $value) {
return null;
}
return \json_encode($value);
}
/**
* @param mixed $value
* @param AbstractPlatform $platform
*
* @return TranslatableValue
*/
public function convertToPHPValue($value, AbstractPlatform $platform)
{
if (null === $value || '' === $value) {
return new TranslatableValue();
}
$value = \is_resource($value) ? \stream_get_contents($value) : $value;
return new TranslatableValue(\json_decode($value, true));
}
/**
* @inheritDoc
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
return !$platform->hasNativeJsonType();
}
}