|
| 1 | +use sea_orm::prelude::{HasMany, HasOne}; |
| 2 | + |
| 3 | +mod cake { |
| 4 | + use sea_orm::prelude::*; |
| 5 | + use serde::Serialize; |
| 6 | + |
| 7 | + #[sea_orm::model] |
| 8 | + #[derive(DeriveEntityModel, Debug, Clone, Serialize)] |
| 9 | + #[sea_orm(table_name = "cake")] |
| 10 | + #[sea_orm(model_attrs(serde(rename_all = "UPPERCASE")))] |
| 11 | + #[sea_orm(model_ex_attrs(serde(rename_all = "PascalCase")))] |
| 12 | + pub struct Model { |
| 13 | + #[sea_orm(primary_key)] |
| 14 | + pub id: i32, |
| 15 | + #[sea_orm(has_many)] |
| 16 | + pub fruits: HasMany<super::fruit::Entity>, |
| 17 | + } |
| 18 | + |
| 19 | + impl ActiveModelBehavior for ActiveModel {} |
| 20 | +} |
| 21 | + |
| 22 | +mod fruit { |
| 23 | + use sea_orm::prelude::*; |
| 24 | + use serde::Serialize; |
| 25 | + |
| 26 | + #[sea_orm::model] |
| 27 | + #[derive(DeriveEntityModel, Debug, Clone)] |
| 28 | + #[sea_orm( |
| 29 | + table_name = "fruit", |
| 30 | + model_attrs(derive(Serialize), serde(rename_all = "UPPERCASE")), |
| 31 | + model_ex_attrs(derive(Serialize), serde(rename_all = "PascalCase")) |
| 32 | + )] |
| 33 | + pub struct Model { |
| 34 | + #[sea_orm(primary_key)] |
| 35 | + pub id: i32, |
| 36 | + pub cake_id: Option<i32>, |
| 37 | + #[sea_orm(belongs_to, from = "cake_id", to = "id")] |
| 38 | + pub cake: HasOne<super::cake::Entity>, |
| 39 | + } |
| 40 | + |
| 41 | + impl ActiveModelBehavior for ActiveModel {} |
| 42 | +} |
| 43 | + |
| 44 | +#[test] |
| 45 | +fn main() -> Result<(), serde_json::Error> { |
| 46 | + use sea_orm::EntityName; |
| 47 | + assert_eq!(cake::Entity.table_name(), "cake"); |
| 48 | + assert_eq!(fruit::Entity.table_name(), "fruit"); |
| 49 | + |
| 50 | + assert_eq!(serde_json::to_string(&cake::Model { id: 1 })?, "{\"ID\":1}"); |
| 51 | + assert_eq!( |
| 52 | + serde_json::to_string(&cake::ModelEx { |
| 53 | + id: 1, |
| 54 | + fruits: HasMany::Loaded(Vec::new()), |
| 55 | + })?, |
| 56 | + "{\"Id\":1,\"Fruits\":[]}" |
| 57 | + ); |
| 58 | + |
| 59 | + assert_eq!( |
| 60 | + serde_json::to_string(&fruit::Model { |
| 61 | + id: 2, |
| 62 | + cake_id: Some(1) |
| 63 | + })?, |
| 64 | + "{\"ID\":2,\"CAKE_ID\":1}" |
| 65 | + ); |
| 66 | + assert_eq!( |
| 67 | + serde_json::to_string(&fruit::ModelEx { |
| 68 | + id: 2, |
| 69 | + cake_id: Some(1), |
| 70 | + cake: HasOne::Unloaded, |
| 71 | + })?, |
| 72 | + "{\"Id\":2,\"CakeId\":1,\"Cake\":null}" |
| 73 | + ); |
| 74 | + |
| 75 | + Ok(()) |
| 76 | +} |
0 commit comments