我正在尝试创建自定义列类型,但是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
* @ORM\Column(type="enum", class="App\Enums\OrderStatus")
*/
protected $status;
/**
* @var string
* @ORM\Column(type="enum", options={"class":"App\Enums\OrderStatus"})
*/
protected $status;
第一个完全没有显示出未定义类字段的错误。第二个工作正常,但是随后它总是尝试重新制作该列,因为从数据库加载定义时未检测到class
。
我正在尝试创建自定义列类型,但是SQL需要依赖自定义参数。默认类型可以毫无问题地处理这些参数。字符串类型具有长度。如何为我的...添加一个...
您是否忘记了config/packages/doctrine.yaml
中的配置类型?