monro/doctrine-nullable-embedabbles

解决使用Doctrine与embedabbles关系(关系可以为null)时出现的问题。如果对象为null,Doctrine会实例化它并将所有属性设置为null,这个库将修复它以将其设置为null。

2.1.0 2021-01-04 11:31 UTC

This package is auto-updated.

Last update: 2024-09-04 19:38:32 UTC


README

Build Status Coverage Status

原因

这个库的目的是修复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