📚 Docs 💻 Examples 🌊 Home

📖 Complete API Reference

Query Builder

Basic Querying

find(id)

Find a single record by primary key

let user = User::find(1).await?;
Parameter Type Description
id PK Primary key value

Returns: Result<Model>

Errors: NotFound if record doesn't exist

all()

Get all records without conditions

let users = User::all().await?;

Returns: Result<Vec<Model>>

query()

Create a new query builder

User::query()
    .where_eq("active", true)
    .get()
    .await?

Returns: QueryBuilder

WHERE Conditions

.where_eq(column, value)

Add equality condition (=)

.where_eq("status", "active")
.where_not(column, value)

Add inequality condition (!=)

.where_not("deleted_at", null)
.where_gt(column, value)

Greater than condition (>)

.where_gt("age", 18)
.where_gte(column, value)

Greater than or equal (>=)

.where_gte("score", 100)
.where_lt(column, value)

Less than condition (<)

.where_lt("price", 50)
.where_lte(column, value)

Less than or equal (<=)

.where_lte("quantity", 10)
.where_like(column, pattern)

Pattern matching (LIKE)

.where_like("name", "%John%")
.where_in(column, values)

Multiple value matching (IN)

.where_in("id", vec![1, 2, 3, 4, 5])
.where_null(column)

Check for NULL values

.where_null("deleted_at")
.where_not_null(column)

Check for non-NULL values

.where_not_null("email")

Ordering & Limiting

.order_by(column, direction)

Sort results by column

.order_by("created_at", Order::Desc)
.then_order_by("name", Order::Asc)
Direction Description
Order::Asc Ascending order
Order::Desc Descending order
.limit(count)

Limit number of results

.limit(10)
.offset(count)

Skip first N records

.offset(20)
.paginate(page, per_page)

Paginate results and get total count

let (users, total) = User::query()
    .paginate(page: 1, per_page: 10)
    .await?;

Returns: Result<(Vec<Model>, i64)>

Execution Methods

.get()

Execute query and get all results

let users = User::query()
    .where_eq("active", true)
    .get()
    .await?;

Returns: Result<Vec<Model>>

.first()

Execute query and get first result

let user = User::query()
    .where_eq("email", "test@example.com")
    .first()
    .await?;

Returns: Result<Model>

.count()

Count matching records

let count = User::query()
    .where_eq("active", true)
    .count()
    .await?;

Returns: Result<i64>

CRUD Operations

Create

.save()

Insert a new record into database

let user = User {
    id: 0,
    email: "john@example.com".to_string(),
    name: "John Doe".to_string(),
    ...
};
let user = user.save().await?;

Note: Primary key must be 0 or default for new records

Model::create()

Create builder for fluent insertion

let user = User::create()
    .email("john@example.com")
    .name("John Doe")
    .active(true)
    .save()
    .await?;

Update

.update()

Update an existing record

let mut user = User::find(1).await?;
user.name = "Jane Doe".to_string();
let user = user.update().await?;
Model::query().update()

Batch update records

User::query()
    .where_eq("active", false)
    .update()
    .set("active", true)
    .execute()
    .await?;

Delete

.delete()

Delete a single record

let user = User::find(1).await?;
user.delete().await?;
Model::query().delete()

Delete records matching conditions

User::query()
    .where_eq("active", false)
    .delete()
    .await?;
.soft_delete()

Mark record as deleted (soft delete)

let user = user.soft_delete().await?;

Note: Model must have deleted_at field and soft_delete enabled

Relations

#[belongs_to]

Define belongs-to relationship

#[belongs_to(User)]
pub user_id: i64,
#[has_one]

Define has-one relationship

#[has_one(Profile)]
pub profile: Option<Profile>,
#[has_many]

Define has-many relationship

#[has_many(Post)]
pub posts: Vec<Post>,
.with_relations()

Eager load relations

let posts = Post::with_relations(["author", "comments"])
    .get()
    .await?;

Error Handling

Error Types

TideORM provides specific error types for different scenarios:

Error Type Description Check Method
NotFound Record doesn't exist .is_not_found()
Connection Database connection failed .is_connection_error()
Query SQL execution failed .is_query_error()
Validation Data validation failed (Pattern match)
Transaction Transaction failed .is_transaction_error()
💡 Tip: Always handle errors appropriately for production applications. Use Result<T> types and proper error propagation.