登录

在Migrate中如何创建索引?

laowu 2022-01-06 14:14:57

在Migrate中如何创建索引?我在官方文档中没找到对应的答案。

1个回答

1

accept

Migrate的原生语法是不支持直接创建索引的。


我们可以通过SQLDatabase的create(index:)方法来创建索引


我简单封装了一个扩展方法:

extension Database {

var sqlDatabase: SQLDatabase? {
return self as? SQLDatabase
}

func create(indexOnColumn column: String, table: String, unique: Bool = false) async throws {
guard let db = self as? SQLDatabase else {
return
}

let sql = db.create(index: "index_" + table + column + "x")
.on(table)
.column(column)

if unique {
sql.unique()
}

try await sql.run()
}

func remove(indexOfColum column: String, table: String) async throws {
guard let db = sqlDatabase else {
return
}

return try await db.raw(.init(
"""
DROP INDEX \(table)_\(column)_idx
"""
)
).run()
}
}

在migration中可以这样使用:

  • prepare:

 try await database.create(indexOnColumn: "target_id", table: "target_check_ins")

2022-01-06 14:31:38

更多