Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Миграции

Миграция — это файл с описанием изменения структуры базы: создать таблицу, добавить столбец, удалить индекс. Миграции хранятся в проекте вместе с кодом, поэтому у каждого разработчика и на сервере база получается одинаковой. Это то же, что миграции в Laravel.

Создание миграции

node ace make:migration posts

В папке database/migrations/ появится файл вида 1727950000000_create_posts_table.ts. Число в начале — время создания: по нему миграции выполняются по порядку.

Описание таблицы

Откройте файл и опишите столбцы статьи:

// database/migrations/1727950000000_create_posts_table.ts
import { BaseSchema } from '@adonisjs/lucid/schema'
 
export default class extends BaseSchema {
  protected tableName = 'posts'
 
  async up() {
    this.schema.createTable(this.tableName, (table) => {
      table.increments('id')
      table.string('title').notNullable()
      table.text('body').notNullable()
      table.boolean('is_published').defaultTo(false)
      table.timestamp('created_at')
      table.timestamp('updated_at')
    })
  }
 
  async down() {
    this.schema.dropTable(this.tableName)
  }
}

Метод up применяет изменение, down отменяет его. Имена столбцов в базе пишут в snake_case.

Типы столбцов

МетодСтолбец
increments('id')Автоинкрементный первичный ключ
string('title')Строка до 255 символов
text('body')Длинный текст
integer('views')Целое число
boolean('is_published')Да или нет
timestamp('created_at')Дата и время

Модификаторы дописывают цепочкой: notNullable(), nullable(), defaultTo(0), unique().

Запуск

node ace migration:run

Lucid выполнит up у всех новых миграций и запишет их в служебную таблицу adonis_schema. В терминале появится строка migrated database/migrations/..._create_posts_table.

КомандаЧто делает
migration:runПрименяет новые миграции
migration:rollbackОткатывает последнюю партию
migration:statusПоказывает, какие миграции применены
migration:freshУдаляет все таблицы и применяет миграции заново

Изменение таблицы

Чтобы добавить столбец в существующую таблицу, создайте новую миграцию и используйте alterTable:

node ace make:migration add_slug_to_posts
// database/migrations/1727960000000_add_slug_to_posts.ts
import { BaseSchema } from '@adonisjs/lucid/schema'
 
export default class extends BaseSchema {
  protected tableName = 'posts'
 
  async up() {
    this.schema.alterTable(this.tableName, (table) => {
      table.string('slug').nullable().unique()
    })
  }
 
  async down() {
    this.schema.alterTable(this.tableName, (table) => {
      table.dropColumn('slug')
    })
  }
}

После node ace migration:run в таблице posts появится столбец slug.

Частая ошибка

Правка уже применённой миграции ничего не меняет: Lucid видит её в adonis_schema и не запускает снова. Пока проект только у вас, можно откатить её через migration:rollback, исправить и применить ещё раз. Если миграция уже ушла на сервер или к коллегам, не трогайте её, а создайте новую.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.