質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

1回答

330閲覧

[Rust] SeaORMを使ってINNER JOINしたい

donut4

総合スコア170

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2024/08/25 10:29

編集2024/08/26 06:40

実現したいこと

自作アプリを作っていますが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を使ってもうまく取得できませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

(質問者からの反応がないため削除します)
公式のドキュメントを読めばちゃんと書いてあります。

投稿2024/08/26 09:04

編集2024/09/11 03:08
bsdfan

総合スコア4774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bsdfan

2024/09/01 23:51

コード部分が質問者さんのものと合わなさそうなので削除。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問