在数据库中创建现有类型实体并将其添加到数据实体,而无需加载不带参数的类型实体 Symfony 或 Builder

问题描述 投票:0回答:1

我面临着一个相当具体的问题。我们继承了一个已经存在很长时间的应用程序,没有任何测试套件,并且很难维护。为了改进这一点,我们创建了一个构建器,它应该帮助我们创建一个数据实体,并且该实体可以是 A、B 或 C 类型。我想创建一个新实体并为其分配一个新的 TypeA,其中包含类型的 ID,但不必直接从数据库加载它,因为这意味着将存储库传递到控制器方法中,然后传递到方法 A 中,方法 A 调用方法 2 和方法 3...这在应用程序中随处可见。从工作负载的角度来看,这是不可行的。

我需要这样的东西:

<?php

class TypeA extends Type {

    private ?int $id = 1;

}

class Data {

    private Type $type;
    
    public function setType() {
        #code
    }

}

$data = DataBuilder::build();
$data->setType(new TypeA());
$em->persist($data);
$em->flush();

提前致谢!

或者,如果有人有一个解决方案,我不需要将任何参数传递到我的构建器中,我也会非常感兴趣!

symfony doctrine builder
1个回答
0
投票

如果您使用的是 PHP >= 8.1(您应该使用 PHP,因为 8.0 及以下版本已经 EOL),您可以使用枚举,如下所示:

enum Type: int {
    case A = 1;
    case B = 2;
    case C = 3;
}

#[ORM\Entity]
class Data {

    #[ORM\Column(enumType: Type::class)]
    private Type $type;
    
    public function setType() {
        #code
    }
}

$data = DataBuilder::build();
$data->setType(Type::A);
$em->persist($data);
$em->flush();
© www.soinside.com 2019 - 2024. All rights reserved.