Example
This commit is contained in:
parent
e2c7722d84
commit
ca459e693b
@ -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: 1, name: "Blueberry", cake_id: Some(1) }
|
||||||
|
|
||||||
Model { id: 2, name: "Rasberry", 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 }
|
||||||
```
|
```
|
@ -52,4 +52,55 @@ async fn main() {
|
|||||||
println!("{:?}", ff);
|
println!("{:?}", ff);
|
||||||
println!();
|
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<Self, TypeErr> {
|
||||||
|
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::<SelectResult>().all(db).await.unwrap();
|
||||||
|
|
||||||
|
println!();
|
||||||
|
for rr in results.iter() {
|
||||||
|
println!("{:?}", rr);
|
||||||
|
println!();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user