目标:当一个User被删除时,UserCategory中该用户的所有条目也应该被删除。
模式:User:
actAs: { Timestampable: ~ }
columns:
first_name: { type: string(255) }
name: { type: string(255) }
company: { type: string(255) }
email: { type: string(255) }
phone: { type: string(255) }
language_id: { type: integer, notnull: true }
token: { type: string(255) }
activated: { type: boolean, default: false }
relations:
Categories:
class: Category
local: user_id
foreign: category_id
refClass: UserCategory
type: many
UserCategory:
actAs: { Timestampable: ~ }
columns:
user_id: { type: integer, notnull: true }
category_id: { type: integer, notnull: true }
Category:
actAs: { Timestampable: ~ }
columns:
language_id: { type: integer, notnull: true }
name: { type: string(255), notnull: true, unique: false }
revision: { type: integer, notnull: false }
icon: { type: string(255) }
relations:
User:
class: User
local: category_id
foreign: user_id
refClass: UserCategory
type: many
发生了什么:
SQLSTATE[23000]: Integrity constraint violation: 1451不能删除或更新父行:a foreign key constraint fails (
testtable
. c .)user_category
,约束user_category_user_id_user_id
外键(user_id
)引用user
(id
))
就像greg0ire说的,为UserCategory定义一个级联完成了工作。它完全忽略了关系块:
UserCategory:
actAs: { Timestampable: ~ }
columns:
user_id: { type: integer, notnull: true }
category_id: { type: integer, notnull: true }
relations:
User: {onDelete: CASCADE, local: user_id, foreign: id, foreignAlias: Users}
Category: {onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: Categories}
阅读这篇原则文档,在应用级级和数据库级级之间选择最适合你的解决方案
您需要在关系上定义一个级联操作。请参阅外键的onDelete for dummies文章(不只是针对dummies),其中包含原则的示例。