From ca459e693b8d522aa2ae3a76f9ec54a2b0f58367 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Mon, 10 May 2021 00:20:46 +0800 Subject: [PATCH] Example --- examples/sqlx-mysql/Readme.md | 6 ++++ examples/sqlx-mysql/src/main.rs | 51 +++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/examples/sqlx-mysql/Readme.md b/examples/sqlx-mysql/Readme.md index 0027f389..7371280e 100644 --- a/examples/sqlx-mysql/Readme.md +++ b/examples/sqlx-mysql/Readme.md @@ -32,4 +32,10 @@ find models belong to: SELECT `fruit`.`id`, `fruit`.`name`, `fruit`.`cake_id` FR Model { id: 1, name: "Blueberry", cake_id: Some(1) } Model { id: 2, name: "Rasberry", cake_id: Some(1) } + +count fruits by cake: SELECT `cake`.`name`, COUNT(`fruit`.`id`) AS `num_of_fruits` FROM `cake` LEFT JOIN `fruit` ON `cake`.`id` = `fruit`.`cake_id` GROUP BY `cake`.`name` + +SelectResult { name: "New York Cheese", num_of_fruits: 2 } + +SelectResult { name: "Chocolate Fudge", num_of_fruits: 1 } ``` \ No newline at end of file diff --git a/examples/sqlx-mysql/src/main.rs b/examples/sqlx-mysql/src/main.rs index 5c6c9a5c..61e613f2 100644 --- a/examples/sqlx-mysql/src/main.rs +++ b/examples/sqlx-mysql/src/main.rs @@ -52,4 +52,55 @@ async fn main() { println!("{:?}", ff); println!(); } + + count_fruits_by_cake(&db).await; +} + +async fn count_fruits_by_cake(db: &Database) { + #[derive(Debug)] + struct SelectResult { + name: String, + num_of_fruits: i32, + } + + { + // TODO: implement with derive macro + use sea_orm::{FromQueryResult, QueryResult, TypeErr}; + + impl FromQueryResult for SelectResult { + fn from_query_result(row: QueryResult) -> Result { + Ok(Self { + name: row.try_get("name")?, + num_of_fruits: row.try_get("num_of_fruits")?, + }) + } + } + } + + print!("count fruits by cake: "); + + let mut select = cake::Entity::find().left_join(cake::Relation::Fruit); + { + use sea_orm::sea_query::*; + type Cake = cake::Column; + type Fruit = fruit::Column; + + select + .query() + .clear_selects() + .column((cake::Entity, Cake::Name)) + .expr_as( + Expr::tbl(fruit::Entity, Fruit::Id).count(), + Alias::new("num_of_fruits"), + ) + .group_by_col((cake::Entity, Cake::Name)); + } + + let results = select.into_model::().all(db).await.unwrap(); + + println!(); + for rr in results.iter() { + println!("{:?}", rr); + println!(); + } }