【发布时间】:2012-10-23 22:05:56
【问题描述】:
我有一个 cmets 表,用于为 3 个不同表中的对象存储 cmets。当我对删除其中一个对象的注释运行功能测试时,它工作正常。但是,如果我运行功能测试以从其他对象中删除注释,我会收到完整性约束 MySQL 错误,因为教义试图“更新”第一个对象表作为删除与表中对象关联的注释的一部分b 或 c。我无法弄清楚为什么删除评论是试图更新父表。
从 3 个对象表到注释表都有一个删除级联。这些表在 Symfony 1.4 中的 YML 中定义
object_a:
columns:
some stuff
relations:
Comments:
class: Comments
local: id
foreign: object_a_id
type: many
foreignType: one
cascade: [delete]
object_b:
columns:
some stuff
relations:
Comments:
class: Comments
local: id
foreign: object_b_id
type: many
foreignType: one
cascade: [delete]
object_c:
columns:
some stuff
relations:
Comments:
class: Comments
local: id
foreign: object_c_id
type: many
foreignType: one
cascade: [delete]
comments:
columns:
object_a_id:
type: integer(4)
object_b_id
type: integer(4)
object_c_id
type: integer(4)
relations:
Object_a:
local: object_a_id
foreign: id
type: one
Object_b:
local: object_b_id
foreign: id
type: one
Object_c:
local: object_c_id
foreign: id
type: one
此故障仅在通过 Symfony 1.4 测试工具运行测试时发生。它在开发环境中运行良好。在添加对象 b 和 c 之前,对象 a 是必填字段,但已被删除。我已经运行了 symfony cache:clear --env=test 来查看是否删除了任何可能干扰的缓存学说对象。
编辑: 现在在生产和开发中遇到问题。据我从数据模块和 BaseModel 文件中可以看出,没有理由更新父表。
【问题讨论】:
-
如果外键生成正确,你能检查生成的 SQL 吗?我一直在关系定义中使用符号“onDelete: cascade”。
-
onDelete:级联是数据库级别,我正在使用应用程序级别的删除。我通过试验发现一个错误,这是由于发生的一些 postDelete() 操作实际上创建了一个新的父对象。我会添加一个更完整的解释,因为如果您不寻找它,这是一个问题。
标签: symfony1 doctrine symfony-1.4 doctrine-1.2