実現したいこと
自作アプリを作っていますがDBから値がうまく取り出すことができなくて詰まっています。
後述するソースを使用して、inner joinで、問い合わせ結果を取得したいです。
発生している問題・分からないこと
後述するソースを使用して、inner joinを使いすべてのモデルからすべての値を取得したいですが片方のテーブル情報が取得できません。
(employees.department_idとdepartments.idを使用して結合したいです。)
DBの状況は以下の画像の通りです。
ですがデバック中の変数は画像の通りでdepartmentsテーブルの情報が取得できていません。
該当のソースコード
src/database/entities/employees.rs
1//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 2 3use sea_orm::entity::prelude::*; 4 5#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] 6#[sea_orm(table_name = "employees")] 7pub struct Model { 8 #[sea_orm(primary_key)] 9 pub id: i32, 10 pub name: Option<String>, 11 pub department_id: Option<i32>, 12} 13 14#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] 15pub enum Relation { 16 #[sea_orm( 17 belongs_to = "super::departments::Entity", 18 from = "Column::DepartmentId", 19 to = "super::departments::Column::Id", 20 on_update = "NoAction", 21 on_delete = "NoAction" 22 )] 23 Departments, 24} 25 26impl Related<super::departments::Entity> for Entity { 27 fn to() -> RelationDef { 28 Relation::Departments.def() 29 } 30} 31 32impl ActiveModelBehavior for ActiveModel {} 33
src/database/entities/departments.rs
1//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 2 3use sea_orm::entity::prelude::*; 4 5#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] 6#[sea_orm(table_name = "departments")] 7pub struct Model { 8 #[sea_orm(primary_key)] 9 pub id: i32, 10 pub name: Option<String>, 11} 12 13#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] 14pub enum Relation { 15 #[sea_orm(has_many = "super::employees::Entity")] 16 Employees, 17} 18 19impl Related<super::employees::Entity> for Entity { 20 fn to() -> RelationDef { 21 Relation::Employees.def() 22 } 23} 24 25impl ActiveModelBehavior for ActiveModel {} 26
src/main.rs
1 let select_res_employees:Vec<entities::employees::Model> = select_employees_join(&db).await.expect("database select error!"); 2 // let sql_str:String = select_employees_join(&db).await; 3 4 pub async fn select_employees_join(db: &DbConn) -> Result<Vec<entities::employees::Model>, sea_orm::DbErr> { 5 // pub async fn select_employees_join(db: &DbConn) -> String { 6 employees::Entity::find() 7 .column_as(departments::Column::Name, "departments_name") 8 9 .join_rev( 10 JoinType::InnerJoin, 11 departments::Entity::belongs_to(employees::Entity) 12 .from(departments::Column::Id) 13 .to(employees::Column::DepartmentId) 14 .into() 15 ) 16 .all(db) 17 .await 18 // .build(DbBackend::MySql) 19 // .to_string() 20 }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
元々公式の情報を参考にしました。
column_asを使ってもうまく取得できませんでした。
補足
特になし
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/09/01 23:51