【发布时间】:2021-10-20 09:47:38
【问题描述】:
我有一个要记录在数据库中的枚举(感谢 php 8.1)。该字段是枚举类型。通过Adminer进行SQL查询,没有问题。
UPDATE `users` SET `grade` = 1, WHERE `id` = '51';
在这种情况下,在 Adminer 中,我可以在成绩列中看到“A5”(值为 1 的枚举名称)
但是使用 Doctrine 和 symfony 表单,数据不会被持久化(仅在这个字段上)。 我没有错误。
if ($form->isSubmitted() && $form->isValid()){
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
这是 ProfileType 中的“添加”
->add('grade', ChoiceType::class, [
'data' => $user ? $user->getGrade() : GradeEnum::D1,
'placeholder' => 'Choose an option',
'required' => false,
'choices' => [
GradeEnum::D1->name => GradeEnum::D1,
GradeEnum::D2->name => GradeEnum::D2,
GradeEnum::C1->name => GradeEnum::C1,
GradeEnum::C2->name => GradeEnum::C2,
GradeEnum::B1->name => GradeEnum::B1,
GradeEnum::B2->name => GradeEnum::B2,
GradeEnum::A1->name => GradeEnum::A1,
GradeEnum::A2->name => GradeEnum::A2,
GradeEnum::A3->name => GradeEnum::A3,
GradeEnum::A4->name => GradeEnum::A4,
GradeEnum::A5->name => GradeEnum::A5,
GradeEnum::A5plus->name => GradeEnum::A5plus,
],
'attr' => [
'class' => 'mb-3'
],
'label' => 'Grade'
])
我做了一个表格的转储。我得到一个枚举。
App\Enum\GradeEnum {#332
+name: "A5"
+value: 1
}
如果我尝试使用另一种类型(如整数)在此字段中保存数据,我会出错。这很正常。但是为什么教义不坚持枚举呢?
【问题讨论】:
-
Doctrine 还不支持 PHP 8.1 枚举。