tideorm-cli-0.1.0 is not a library.
TideORM CLI
A comprehensive command-line interface for TideORM - A powerful Rust ORM.
Installation
Add to your Cargo.toml:
[dependencies]
tideorm = "0.1"
[dev-dependencies]
tideorm-cli = "0.1"
Or install globally:
cargo install tideorm-cli
Quick Start
tideorm init my_project
tideorm make model User \
--fields="name:string,email:string:unique,age:i32:nullable" \
--relations="posts:has_many:Post,company:belongs_to:Company" \
--timestamps --soft-deletes --tokenize --migration
tideorm migrate run
tideorm db seed
Configuration
TideORM CLI uses a tideorm.toml configuration file:
[database]
driver = "postgres"
host = "localhost"
port = 5432
database = "myapp"
username = "postgres"
password = "password"
[paths]
models = "src/models"
migrations = "src/migrations"
seeders = "src/seeders"
factories = "src/factories"
[migrations]
table = "migrations"
[seeders]
default = "DatabaseSeeder"
[model_generation]
timestamps = true
soft_deletes = false
tokenize = false
Commands
Migration Commands
tideorm migrate run
tideorm migrate run --pretend tideorm migrate run --force tideorm migrate run --step=3
tideorm migrate generate create_users_table
tideorm migrate generate create_users_table --create=users --fields="name:string,email:string"
tideorm migrate generate add_avatar_to_users --table=users --fields="avatar_url:string:nullable"
tideorm migrate up tideorm migrate up --step=3 tideorm migrate down tideorm migrate down --step=3
tideorm migrate redo tideorm migrate redo --step=3
tideorm migrate fresh
tideorm migrate fresh --seed
tideorm migrate reset
tideorm migrate refresh
tideorm migrate refresh --seed
tideorm migrate status
tideorm migrate history
Model Generation
The make model command is the most powerful generator, supporting:
tideorm make model <NAME> [OPTIONS]
tideorm make model User
tideorm make model User --fields="name:string,email:string:unique,age:i32:nullable"
tideorm make model Post --relations="user:belongs_to:User,comments:has_many:Comment"
tideorm make model Article --translatable="title,description,content"
tideorm make model Product \
--attachments-single="thumbnail,featured_image" \
--attachments-multi="gallery,documents"
tideorm make model User --indexed="email,username" --unique="email"
tideorm make model Profile --nullable="bio,avatar_url,website"
tideorm make model User --soft-deletes --timestamps --tokenize
tideorm make model User --fields="name:string" --migration --seeder
tideorm make model User --all
tideorm make model BlogPost \
--table=blog_posts \
--fields="title:string,slug:string:unique,body:text,views:i64:default=0,published_at:datetime:nullable" \
--relations="author:belongs_to:User,comments:has_many:Comment,tags:has_many:Tag" \
--translatable="title,body" \
--attachments-single="featured_image" \
--attachments-multi="gallery" \
--indexed="slug,published_at" \
--unique="slug" \
--soft-deletes \
--timestamps \
--tokenize \
--migration \
--seeder
Other Generators
tideorm make migration create_posts_table
tideorm make migration create_posts_table --create=posts --fields="title:string,body:text"
tideorm make seeder UserSeeder --model=User --count=50
tideorm make factory UserFactory --model=User
tideorm make controller UserController --model=User --resource
Database Commands
tideorm db seed
tideorm db seed --seeder=UserSeeder
tideorm db fresh
tideorm db status
tideorm db create
tideorm db drop
tideorm db drop --force
tideorm db wipe
tideorm db table users
tideorm db tables
Utility Commands
tideorm init my_project
tideorm init my_project --database=mysql
tideorm config
tideorm models
tideorm schema
tideorm schema --table=users
Global Options
All commands support these global options:
-c, --config <FILE> Path to tideorm.toml (default: tideorm.toml)
-v, --verbose Enable verbose output
-h, --help Show help
-V, --version Show version
Generated File Examples
Generated Model
use tideorm::prelude::*;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use super::post::Post;
use super::company::Company;
#[derive(Debug, Clone, Serialize, Deserialize, Model)]
#[tide(table = "users", soft_delete, tokenize)]
pub struct User {
#[tide(primary_key, auto_increment)]
pub id: i64,
pub name: String,
#[tide(unique)]
pub email: String,
pub age: Option<i32>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub deleted_at: Option<DateTime<Utc>>,
}
impl User {
pub async fn posts(&self) -> tideorm::Result<Vec<Post>> {
Post::where_eq("user_id", self.id).get().await
}
pub async fn company(&self) -> tideorm::Result<Option<Company>> {
Company::find(self.company_id).await
}
pub async fn find_by_email(email: &String) -> tideorm::Result<Option<Self>> {
Self::where_eq("email", email).first().await
}
}
Generated Migration
use tideorm::migration::{Migration, MigrationContext};
pub struct CreateUsersTable;
#[async_trait::async_trait]
impl Migration for CreateUsersTable {
fn name(&self) -> &'static str {
"create_users_table"
}
async fn up(&self, ctx: &MigrationContext) -> tideorm::Result<()> {
ctx.execute(r#"
CREATE TABLE IF NOT EXISTS users (
id BIGSERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
age INT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
)
"#).await?;
Ok(())
}
async fn down(&self, ctx: &MigrationContext) -> tideorm::Result<()> {
ctx.execute(r#"DROP TABLE IF EXISTS users"#).await?;
Ok(())
}
}
Generated Seeder
use tideorm::prelude::*;
use crate::models::User;
pub struct UserSeeder;
impl UserSeeder {
pub async fn run() -> tideorm::Result<()> {
for i in 1..=10 {
let user = User {
id: 0,
name: format!("User {}", i),
email: format!("user{}@example.com", i),
..Default::default()
};
user.save().await?;
}
Ok(())
}
}
Environment Variables
The CLI supports environment variable expansion in tideorm.toml:
[database]
password = "${DATABASE_PASSWORD}"
Create a .env file:
DATABASE_PASSWORD=secret
License
MIT License - See LICENSE file for details.