migration的enum类型有一种workaround方法解决:
在你的Migration的类文件中初始化时将此类型注册为string
public function __construct()
{
DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
}
的方式解决。
虽然个人觉得还是用tinyint的类型替代会更好,数字的取值含义,我一般建议在column的comment注释中分别说明:
order_status ->comment='单据状态#0:draft/1:submit/2:approved';
其中数字后面的是这个值的代码中的字面标识量,取值的含义比如draft草稿,submit提交,approved审核通过的多语言翻译可以在i18n中定义,
而相关的使用可以在Model/Repository中定义
const INDEX_ORDER_STATUS_DRAFT = 0;
const INDEX_ORDER_STATUS_SUBMIT = 1;
const INDEX_ORDER_STATUS_APPROVED = 2;
const LABEL_ORDER_STATUS_DRAFT = 'draft';
const LABEL_ORDER_STATUS_SUBMIT = 'submit';
const LABEL_ORDER_STATUS_APPROVED = 'approved';
// 用于根据index数字查找字面标识>显示输出翻译
protected static $indexLabelMapOrderStatus = [
self::INDEX_ORDER_STATUS_DRAFT=>self::LABEL_ORDER_STATUS_DRAFT,
self::INDEX_ORDER_STATUS_SUBMIT=>self::LABEL_ORDER_STATUS_SUBMIT,
self::INDEX_ORDER_STATUS_APPROVED=>self::LABEL_ORDER_STATUS_APPROVED,
];
上面的这段代码中【字段名】-【字段字面标识】-【枚举取值】的相关const定义和字典定义其实都可以通过数据库结构定义信息自动代码生成