mysql - 如何将自定义参数添加到 Doctrine Column 类型
问题描述
我正在尝试制作自定义列类型,但 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
从数据库加载定义时没有检测到。
解决方案
你忘了配置类型config/packages/doctrine.yaml
吗?
它必须看起来像:
doctrine:
dbal:
types:
enum: 'App\Doctrine\Types\EnumType' #Change it to valid class
并在连接部分添加一个mapping_types:
doctrine:
dbal:
connections:
default:
mapping_types:
enum: enum
推荐阅读
- javascript - 使用 MVC IIS 8 错误插入文件夹 C# 发生未处理的访问异常
- perl - 如何使用 Perl 中的循环计算部分文本文件中的元素数量?
- reactjs - 多个 WordPress 插件可以添加到同一个 Gutenberg 侧边栏吗?
- javascript - 为什么我的 JWT expiresIn 值在从服务器发送到前端接收之间会发生变化?
- python - 如何根据条件编辑包含序列的数据框列?
- javascript - Javascript - “复合”类继承
- ios - 如何使用 SwiftUI 处理嵌套的 TabView?
- python - 一个程序来检查一个反转的字符串是否是回文或不在 python 中使用 Stack Machine
- bluetooth-lowenergy - 蓝牙 5.2 广告和扫描响应
- python - Python 库“单击”将参数传递给函数