Я пытаюсь создать пользовательский тип столбца, но 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
при загрузке определения из базы данных.