Logo

Migrations

macro model!, makemigrations, migration up/down/status.

Declarer un modele — macro model! entities/article.rs
use runique::prelude::*;

model! {
    Article,
    table: "article",
    pk: id => i32,
    fields: {
        title:      String   [required, max_len(255)],
        content:    text     [required],
        author_id:  i32      [required, fk(eihwaz_users.id, cascade)],
        published:  bool     [required, default(false)],
        created_at: datetime [auto_now],
        updated_at: datetime [auto_now_update],
    }
}
Declarer un modele — macro model! entities/article.rs
use runique::prelude::*;

model! {
    Article,
    table: "article",
    pk: id => i32,
    fields: {
        title:      String   [required, max_len(255)],
        content:    text     [required],
        author_id:  i32      [required, fk(eihwaz_users.id, cascade)],
        published:  bool     [required, default(false)],
        created_at: datetime [auto_now],
        updated_at: datetime [auto_now_update],
    }
}
Commandes migration terminal
# Generer les fichiers de migration depuis les entites
runique makemigrations

# Appliquer toutes les migrations en attente
runique migrate up

# Annuler la derniere migration
runique migrate down

# Voir l''etat des migrations
runique migrate status
Commandes migration terminal
# Generer les fichiers de migration depuis les entites
runique makemigrations

# Appliquer toutes les migrations en attente
runique migrate up

# Annuler la derniere migration
runique migrate down

# Voir l''etat des migrations
runique migrate status
Fichier de migration genere migration generee
use sea_orm_migration::prelude::*;

#[derive(DeriveMigrationName)]
pub struct Migration;

#[async_trait::async_trait]
impl MigrationTrait for Migration {
    async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
        manager.create_table(
            Table::create()
                .table(Alias::new("article"))
                .if_not_exists()
                .col(ColumnDef::new(Alias::new("id")).integer().not_null()
                    .auto_increment().primary_key())
                .col(ColumnDef::new(Alias::new("title")).string().not_null())
                .col(ColumnDef::new(Alias::new("content")).text().not_null())
                .col(ColumnDef::new(Alias::new("published")).boolean().not_null()
                    .default(false))
                .to_owned(),
        ).await
    }

    async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
        manager.drop_table(Table::drop().table(Alias::new("article")).to_owned()).await
    }
}
Fichier de migration genere migration generee
use sea_orm_migration::prelude::*;

#[derive(DeriveMigrationName)]
pub struct Migration;

#[async_trait::async_trait]
impl MigrationTrait for Migration {
    async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
        manager.create_table(
            Table::create()
                .table(Alias::new("article"))
                .if_not_exists()
                .col(ColumnDef::new(Alias::new("id")).integer().not_null()
                    .auto_increment().primary_key())
                .col(ColumnDef::new(Alias::new("title")).string().not_null())
                .col(ColumnDef::new(Alias::new("content")).text().not_null())
                .col(ColumnDef::new(Alias::new("published")).boolean().not_null()
                    .default(false))
                .to_owned(),
        ).await
    }

    async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
        manager.drop_table(Table::drop().table(Alias::new("article")).to_owned()).await
    }
}