Doctrine一对一双向关系CASCADE方向

时间:2016-10-27 08:27:09

标签: php symfony doctrine-orm annotations doctrine

我有两个使用yaml注释定义的学说实体(User和DatiFiscali),如下所示。

我想要实现的是删除用户以便在级联上删除 DatiFiscali

但是使用下面的配置我只能获得相反的行为:当删除 DatiFiscali 时,用户也将在级联中删除。

我可以通过手动添加以下外键轻松获得所需的结果:

CONSTRAINT `datifiscali_ibfk_1` FOREIGN KEY (`id`) REFERENCES `User` (`datifiscali_id`) ON DELETE CASCADE

但是,使用' docrine orm更新架构时:schema-tool:update'正确的学说将尝试DROP上面的外键。

在没有任何可能的情况下实现上述目标:

  • 改变关系方向。
  • 必须使用自定义sql而不是依赖于doctrine orm:schema-tool:create

实体A:

Test\User:
    type: entity
    table: User
    id:
        id:
            type: integer
            generator:
                strategy: AUTO
    fields:
        username:
            type: text
            nullable: true
        email:
            type: text
            nullable: true

    oneToOne:
        datiFiscali:
            targetEntity: DatiFiscali
            inversedBy: user
            joinColumns:
                datifiscali_id:
                    referencedColumnName: id
                    onDelete: CASCADE

实体B:

Test\DatiFiscali:
    type: entity
    table: DatiFiscali
    id:
        id:
            type: integer
            generator:
                strategy: AUTO

    fields:
        name:
            type: text
            nullable: true
        surname:
            type: text
            nullable: true
        business_name:
            type: text
            nullable: true

    oneToOne:
        user:
            targetEntity: User
            mappedBy: datiFiscali

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

尝试将cascade选项放在正确的位置:

oneToOne:
    datiFiscali:
        targetEntity: DatiFiscali
        inversedBy: user
        joinColumns:
            datifiscali_id:
                referencedColumnName: id
        cascade: ["remove"]