架构

未匹配的标注

架构迁移类必须扩展 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 方法。 你永远不应该手动调用此方法

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/adonisjs-ref/ji...

译文地址:https://learnku.com/docs/adonisjs-ref/ji...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~