我遇到了一个问题,一段时间以来一直在阻止我开发应用程序,我认为自己终于想尽办法了。由于某种原因,我似乎无法让外键在SQLite.swift / SQLite中工作(我无法弄清楚是在滥用库还是在总体上误解了SQLite)。我正在尝试使用级联删除功能,感觉好像我已经正确设置了所有东西,但是它不起作用。
让我确保首先清楚我的理解。我有一个父表“ Categories”和一个子表“ Subcategories”,它是子表“ Transactions”的父表。子类别具有与类别的“ id”行相关的“ category_id”行,外键在删除时级联。事务具有与子类别的“ id”行相关的“ subcategory_id”行,外键在删除时设置为空。当我从“类别”中删除一行时,也应删除“子类别”中具有该类别ID的任何行,并且“交易”中具有该子类别ID的任何行应将“子类别ID”字段设置为null。正确吗?
我将所有SQLite东西都放在一个类中处理。这是与创建子类别表有关的代码片段,我在其中创建了外键:
do {
try db!.run(subcategories.create(ifNotExists: true) { table in
table.column(id, primaryKey: .autoincrement)
table.column(name, defaultValue: "New Subcategory")
table.column(sort)
table.column(category_id)
table.column(budget_id)
table.foreignKey(category_id, references: categories, id, update: .cascade, delete: .cascade)
table.foreignKey(budget_id, references: budgets, id, update: .cascade, delete: .cascade)
})
} catch {
print("SQLite: Unable to create 'Subcategories' table")
}
Here is the full code for that class.
如果任何人都可以发现我在这里做错了什么,我会给你我的长子(或者至少是谢谢)。