🦀

【Rust】SeaORMを使いSELECT時にテーブルを内部結合してデータを取得する

に公開

この記事を書くにあたって

Rustで自作アプリを作っている際、データベースの操作するために、ORMにSeaORMを使いました。
 テーブルを内部結合する機会があったのですが、実装までに時間がかかり苦戦しました。今後似たような実装をするときのためにアクセスしやすい簡易的な手順書として残しておきたいと思ったのでここに書き留めておきます。

この記事で説明しないこと

  • ORMのインストール、セットアップ方法
  • use文の記載
  • エンティティファイルの説明
  • DBの接続方法

実演

データベースの状況確認

SELECT対象のテーブルの状況はこのようになります。(version = "0.12.2")
staffs(子)のdepartment_iddepartments(親)のid 外部キーになります。

ソース

pub async  fn select_inner_jouin()  {

       // INNER JOINクエリを実行(エンティティファイル内にRelatedが実装されている必要あり)
       let staff_with_department:Vec<(staffs::Model, Option<departments::Model>)> = staffs::Entity::find()
           .find_also_related(departments::Entity) 
           .all(db)
           .await?;

       // 結果を処理
       for (staff, department) in staff_with_department {
           if let Some(department) = department {
               println!(
                   "Staff ID: {}, Name: {}, Department: {}",
                   staff.id, staff.staff_name.unwrap(), department.departments_name.unwrap()
               );
           }
       }

       Ok(())
   }

//出力結果の例> Staff ID: 1, Name: 田中, Department: 営業部

Discussion