Derive Macro DerivePartialModel

Source
#[derive(DerivePartialModel)]
{
    // Attributes available to this derive:
    #[sea_orm]
}
Expand description

The DerivePartialModel derive macro will implement sea_orm::PartialModelTrait for simplify partial model queries.

ยงUsage

use sea_orm::{entity::prelude::*, sea_query::Expr, DerivePartialModel, FromQueryResult};
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Deserialize, Serialize)]
#[sea_orm(table_name = "posts")]
pub struct Model {
    #[sea_orm(primary_key)]
    pub id: i32,
    pub title: String,
    #[sea_orm(column_type = "Text")]
    pub text: String,
}

#[derive(Debug, FromQueryResult, DerivePartialModel)]
#[sea_orm(entity = "Entity")]
struct SelectResult {
    title: String,
    #[sea_orm(from_col = "text")]
    content: String,
    #[sea_orm(from_expr = "Expr::val(1).add(1)")]
    sum: i32,
}

If all fields in the partial model is from_expr, the specifying the entity can be skipped.

use sea_orm::{entity::prelude::*, sea_query::Expr, DerivePartialModel, FromQueryResult};

#[derive(Debug, FromQueryResult, DerivePartialModel)]
struct SelectResult {
    #[sea_orm(from_expr = "Expr::val(1).add(1)")]
    sum: i32,
}

It is possible to nest structs deriving FromQueryResult and DerivePartialModel, including optionally, which is useful for specifying columns from tables added via left joins, as well as when building up complicated queries programmatically.

use sea_orm::{entity::prelude::*, sea_query::Expr, DerivePartialModel, FromQueryResult};

#[derive(Debug, FromQueryResult, DerivePartialModel)]
struct Inner {
    #[sea_orm(from_expr = "Expr::val(1).add(1)")]
    sum: i32,
}

#[derive(Debug, FromQueryResult, DerivePartialModel)]
struct Outer {
    #[sea_orm(nested)]
    inner: Inner,
    #[sea_orm(nested)]
    inner_opt: Option<Inner>,
}

A field cannot have attributes from_col, from_expr or nested at the same time. Or, it will result in a compile error.

โ“˜
use sea_orm::{entity::prelude::*, FromQueryResult, DerivePartialModel, sea_query::Expr};

#[derive(Debug, FromQueryResult, DerivePartialModel)]
#[sea_orm(entity = "Entity")]
struct SelectResult {
    #[sea_orm(from_expr = "Expr::val(1).add(1)", from_col = "foo")]
    sum: i32
}