如何将自定义参数添加到原则列类型



我正在尝试创建自定义列类型,但SQL需要依赖于自定义参数。 默认类型处理这些参数没有问题,例如。字符串类型具有长度。 如何为我的类型添加一个。

我正在尝试做的事情的示例:

class EnumType extends Type
{
const ENUM = 'enum';
public function getName(): string
{
return self::ENUM;
}
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform): string
{
$class = $fieldDeclaration['class'];
if (!is_subclass_of($class, Enum::class)) {
throw new Exception('You must specify a valid enum class');
}
$values = call_user_func([$class, 'getValues']);
return "ENUM('" . implode("', '", $values) . "')";
}
public function convertToPHPValue($value, AbstractPlatform $platform): ?Point
{
return $value;
}
public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string
{
return $value;
}
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
return true;
}
}

到目前为止,我尝试了:

/**
* @var string
* @ORMColumn(type="enum", class="AppEnumsOrderStatus")
*/
protected $status;
/**
* @var string
* @ORMColumn(type="enum", options={"class":"AppEnumsOrderStatus"})
*/
protected $status;

第一个根本不起作用,显示未定义类字段的错误。 第二个确实工作正常,但随后它总是尝试重新制作列,因为它在从数据库加载定义时没有检测到class

您是否忘记在config/packages/doctrine.yaml中配置类型?

它必须看起来像:

doctrine:
dbal:
types:
enum: 'AppDoctrineTypesEnumType' #Change it to valid class

并在"连接"部分中添加一个mapping_types:

doctrine:
dbal:
connections:
default:
mapping_types:
enum: enum

最新更新