我在 Swift 中使用 SharkORM 创建一个 SQLite 数据库,问题是我有两个使用外键的一对多关系的表,我需要知道是否有办法在这两个表上实现级联删除,
当我从主表中删除一条记录时,明细表中所有具有外键的记录都应该自动删除,我不想手动实现。
那么有没有办法使用 SharkORM 实现级联删除?我已经浏览了文档,找不到任何东西,
在此先感谢您的帮助。
因此,如果您以 为例Person -> Department
,其中 person 包含一个.department
属性。entityWillDelete
然后通过该方法级联这些删除。
一个例子是像这样的“东西”。
class Department: SRKObject {
...
override func entityWillDelete() -> BOOL {
Person.query()
.whereWithFormat("department = %@", parameters:[self])
.fetch()
.removeAll()
return true
}
}
对于关系,总是看反面。
的文档在entityWillDelete
这里提到了这一点。
/**
* Before SharkORM attempts an operation it will ask the
* persitable class if it would like to continue with this operation.
*
* @return BOOL if YES is returned then SharkORM WILL complete the operation
* and it is guaranteed to complete. All pre-requisite checks have been made
* and the statement compiled before getting to this point.
* It is safe to use this method to cascade operations to other classes.
* In the case of delete, you might wish to delete related records, or
* indeed remove this object from related tables.
*/
- (BOOL)entityWillDelete;
这一切都在事务中完成,包括所有级联和事件触发器更改。然后可以在失败/错误/中止的情况下全部回滚。