Dav*_*idG 1 php enums doctrine
我有一个枚举(感谢 php 8.1),我想将其记录在数据库中。该字段的类型为Enum。通过Adminer进行SQL查询,没有问题。
UPDATE `users` SET `grade` = 1, WHERE `id` = '51';
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在 Adminer 中,我可以在成绩列中看到“A5”(值为 1 的枚举名称)
但是对于 Doctrine 和 symfony 形式,数据不会被持久化(仅在这个字段上)。我没有错误。
if ($form->isSubmitted() && $form->isValid()){
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
Run Code Online (Sandbox Code Playgroud)
这是 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'
])
Run Code Online (Sandbox Code Playgroud)
我把表格转储了。我得到一个枚举。
App\Enum\GradeEnum {#332
+name: "A5"
+value: 1
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用其他类型(例如整数)保留该字段中的数据,则会出错。这个是正常的。但为什么枚举不坚持原则呢?
从版本 2.11 开始,ORM 支持 php 8 枚举
enum Suit: string {
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
}
#[Entity]
class Card
{
/** ... */
#[Column(type: 'string', enumType: Suit::class)]
public $suit;
}
Run Code Online (Sandbox Code Playgroud)
您可以在官方博客文章中阅读更多相关内容。官方文档应该很快就会发布。
| 归档时间: |
|
| 查看次数: |
2283 次 |
| 最近记录: |