如何解决在 Symfony 中为 ENUM 使用 columnDefinition 中的数组
当我使用 Symfony 中的 columnDefinition 来定义一个 ENUM 列时,我需要将可能的值写成痛苦的文本:
columnDefinition="ENUM('red','blue','green')"
因为这可能会导致后期出现错误,我希望能够在那里放置一个数组:
columnDefinition="ENUM(static::COLORS)"
我该如何解决这个问题?
解决方法
您可以创建一个 Enum 作为类型并使用它
<?php
namespace App\DBAL;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
class EnumColorsType extends Type
{
const ENUM_COLORS = 'enum_colors';
const COLOR_RED = 'red';
const COLOR_BLUE = 'blue';
const COLOR_GREEN= 'green';
publkic static $AVAILBLE_COLORS = ['blue','red','green'];
public function getSQLDeclaration(array $fieldDeclaration,AbstractPlatform $platform)
{
return sprintf("ENUM(%s)",implode(',',static::$AVAILBLE_COLORS));
}
public function convertToPHPValue($value,AbstractPlatform $platform)
{
return $value;
}
public function convertToDatabaseValue($value,AbstractPlatform $platform)
{
if (!in_array($value,static::$AVAILBLE_COLORS)) {
throw new \InvalidArgumentException("Invalid Colors");
}
return $value;
}
public function getName()
{
return self::ENUM_COLORS;
}
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
return true;
}
}
然后使用它
<?php
...
/**
* @ORM\Entity
*/
class YourEntity
{
/**
* @Column(type="enum_colors")
*/
private $color;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。