架构
架构迁移类必须扩展 Base Schema 类 类才能将 SQL DDL 操作作为代码运行。
你可以通过运行 node ace make:migration
命令来创建新的架构迁移。
import BaseSchema from '@ioc:Adonis/Lucid/Schema'
class UserSchema extends BaseSchema {
}
生命周期方法
每个模式类都有以下生命周期方法,这些方法在你运行或回滚迁移时执行。
up
up
方法用于定义运行 node ace migration:run
命令时要执行的操作。 在此方法中,你始终执行诸如创建表或更改表之类的建设性操作。
class UserSchema extends BaseSchema {
public async up() {
}
}
down
down
方法应该撤消 up
方法执行的操作。你需要使用等效的 API 手动运行撤消操作。
例如,如果 up
方法使用 createTable
方法创建一个新表,则 down
方法可以使用 dropTable
方法。
class UserSchema extends BaseSchema {
public async up() {
this.schema.createTable('users', () => {
})
}
public async down() {
this.schema.dropTable('users')
}
}
方法/属性
以下是模式类上可用的方法和属性的列表。
now
now
方法是将默认值设置为 CURRENT_TIMESTAMP
的辅助。
table.timestamp('created_at').defaultTo(this.now())
raw
创建用于运行 DDL 语句的原始查询。
class UserSchema extends BaseSchema {
public up() {
this.defer(async () => {
await this.raw('CREATE EXTENSION IF NOT EXISTS "uuid-ossp"')
})
}
}
defer
defer
方法允许您将自定义数据库操作包装在 defer 块中。 出于以下原因,需要推迟操作。
- 确保您的自定义操作以正确的顺序执行
- 确保在试运行模式下运行迁移时不执行您的操作。
public async up() {
this.defer(async () => {
// 仅在未在空运行模式下运行时执行
await this.db.from('users')
})
}
debug
用于启用/禁用给定模式类的查询调试的属性。 默认情况下,调试继承自架构类使用的 查询客户端。
class UserSchema extends BaseSchema {
public debug = false
}
disableTransactions
在事务中启用/禁用包装数据库查询的属性。 默认情况下启用事务。 给定迁移文件中的所有语句都包装在单个事务中。
class UserSchema extends BaseSchema {
public disableTransactions = true
}
schema
返回对 schema builder 的引用。 该属性是 getter 并在每次访问时返回模式构建器的新实例。
class UserSchema extends BaseSchema {
public up() {
// 每个访问调用都返回一个新实例
console.log(this.schema !== this.schema)
}
}
execUp
该方法在迁移过程中在内部调用,以执行用户定义的 up
方法。 你永远不应该手动调用此方法。
execDown
该方法在迁移过程中在内部调用,以执行用户定义的 down
方法。 你永远不应该手动调用此方法。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。