monro / doctrine-nullable-embedabbles
解决使用Doctrine与embedabbles关系(关系可以为null)时出现的问题。如果对象为null,Doctrine会实例化它并将所有属性设置为null,这个库将修复它以将其设置为null。
2.1.0
2021-01-04 11:31 UTC
Requires
- php: ^7.4 || 8.0.0
- doctrine/common: ^3
- doctrine/orm: ^2
- symfony/finder: >= 4.0
- symfony/yaml: >= 4.0
Requires (Dev)
README
原因
这个库的目的是修复Doctrine的一个已知bug,即您不能有可空的embeddables。
问题如下
给定一个名为"A"的类,它与一个嵌入的"B"有ORM关系,"B"可以为null
当从数据库加载"A"的实例时,"B"为null
然后创建一个"B"的实例,所有值都为null,并将其分配给"A"的"B"属性
这个库的行为将是以下
给定一个名为"A"的类,它与一个嵌入的"B"有ORM关系,"B"可以为null
当从数据库加载"A"的实例时,"B"为null
然后设置"A"的"B"属性为null
目前它只适用于yml文件,正如我们使用的,如果您认为将其用于XML或注解将很有用,请提交一个问题
安装
这个库主要设计用于与symfony一起使用,因为它依赖于其配置文件。
Syfmony
在您的services.yaml文件中(通常位于/config)添加以下行(通常位于/config)
imports: - { resource: ../vendor/monro/doctrine-nullable-embedabbles/src/EmbeNulls/config/services.yaml }
如果您需要更改doctrine.yaml的位置(默认位置为%kernel.project_dir%/config/packages/doctrine.yaml
),您可以在.env中设置环境变量DOCTRINE_CONFIG_FILE
使用
像往常一样,在YML文件中定义您的ORM映射,并在嵌入属性中添加nullable为true。例如
#Dog.orm.yml Some\Namespace\Dog: type: entity table: dog id: ... fields: name: type: string embedded: petIdentificationNumber: class: Some\Namespace\PetIdentificationNumber nullable: true