Schema builder
The schema builder allows you create, alter, drop, and perform other SQL DDL operations.
You can access the schema builder instance using the this.schema
property in your migration files.
import { BaseSchema } from '@adonisjs/lucid/schema'
class UserSchema extends BaseSchema {
async up() {
console.log(this.schema)
}
}
createTable
Creates a new database table. The method accepts the table name and a callback that receives the table builder instance to create table columns.
class UserSchema extends BaseSchema {
async up() {
this.schema.createTable('users', (table) => {
table.increments()
table.string('name')
table.timestamp('created_at', { useTz: true })
table.timestamp('updated_at', { useTz: true })
})
}
}
createSchema
Create the PostgreSQL schema. It accepts the schema name.
class FoundationSchema extends BaseSchema {
async up() {
this.schema.createSchema('public')
}
}
table/alterTable
Select a SQL table to alter its columns. The method accepts the table name and a callback that receives the table builder instance to modify the table columns.
class UserSchema extends BaseSchema {
async up() {
this.schema.alterTable('user', (table) => {
/**
* Drop the name column
*/
table.dropColumn('name')
/**
* Add first_name and last_name columns
*/
table.string('first_name')
table.string('last_name')
})
}
}
renameTable
Rename a table. The method accepts the existing table name as the first argument and the new name as the second argument.
class UserSchema extends BaseSchema {
async up() {
this.schema.renameTable('user', 'app_users')
}
}
dropTable
Drop an existing SQL table. The method accepts the table name as the only argument.
class UserSchema extends BaseSchema {
async down() {
this.schema.dropTable('users')
}
}
dropTableIfExists
Similar to the dropTable
method, but conditionally drop the table if it exists.
class UserSchema extends BaseSchema {
async down() {
this.schema.dropTableIfExists('users')
}
}
dropSchema
Drop an existing PostgreSQL schema. The method accepts the schema name as the only argument.
class FoundationSchema extends BaseSchema {
async down() {
this.schema.dropSchema('public')
}
}
dropSchemaIfExists
Similar to the dropSchema
method, but conditionally drop the schema if it exists.
class FoundationSchema extends BaseSchema {
async down() {
this.schema.dropSchemaIfExists('public')
}
}
raw
Run a SQL query from the raw string. Unlike the raw query builder, the schema.raw
method does not accept bindings separately.
class UserSchema extends BaseSchema {
async up() {
this.schema
.raw("SET sql_mode='TRADITIONAL'")
.table('users', (table) => {
table.dropColumn('name')
table.string('first_name')
table.string('last_name')
})
}
}
withSchema
Specify the schema to select when running the SQL DDL statements. The method accepts the schema name as the only argument.
class UserSchema extends BaseSchema {
async up() {
this.schema
.withSchema('public')
.createTable('users', (table) => {
table.increments()
table.string('name')
table.timestamp('created_at', { useTz: true })
table.timestamp('updated_at', { useTz: true })
})
}
}