Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

O/R Mapper #58

Open
21 tasks done
friendbear opened this issue Sep 4, 2023 · 0 comments
Open
21 tasks done

O/R Mapper #58

friendbear opened this issue Sep 4, 2023 · 0 comments
Assignees
Labels
learning Books and other studies

Comments

@friendbear
Copy link
Owner

friendbear commented Sep 4, 2023

#Lang/Rust

O/R Mapper

O/R Mapperの概要

  • SeaORMの概要 ✅ 2023-09-05
  • 使用する外部クレート ✅ 2023-09-05
  • 環境ファイルの作成 ✅ 2023-09-05
DATABASE_URL=postgres://postgres:admin@localhost:5432/rust_sample

コネクションプールの生成

  • 生成機能 ✅ 2023-09-04
  • コネクションプールの取得 ✅ 2023-09-04

マイグレーション機能の利用

Migrationは使ってない。

SeaORM

cargo install sea-orm-cli

How to use

default database url .env

sea-orm-cli [-h|-v|-V]

official reference

sub commands

  • generate
  • help
  • migrate
sea-orm-cli generate entity -u postgres://usr:pass@host:5432/dbname -o src/modules \
    --with-serde (none, serialize, deserialize, both) [default: none]
  • sea-orm-cli ✅ 2023-09-04
  • Model生成コマンドの実行 ✅ 2023-09-04
  • 生成されたModel ✅ 2023-09-04

SeaORMが生成するModelはデフォルトで参照機能のみを提供し、更新系の機能はActiveModelを利用するようになっている。
ActiveModelBehaviorトレイトはトリガーのように追加や削除の前後に実行されるメソッドが定義され任意の前後処理実装のために利用する。

CRUD操作の準備

  • Repositoryトレイト ✅ 2023-09-05
  • トレイトの実装 ✅ 2023-09-05

CRUD操作の実装

  • シンプルな問い合わせ ✅ 2023-09-05
  • 全件取得 ✅ 2023-09-05
  • 主キー問い合わせ ✅ 2023-09-05
  • 部分一致検索 ✅ 2023-09-05
  • レコードの追加 ✅ 2023-09-06
  • レコードの更新 ✅ 2023-09-06
  • レコードの削除 ✅ 2023-09-06

テーブル結合

sea_orm::Selectトレイトのメソッドを利用する
結合処理に関連するメソッドは以下

メソッド 機能
find_also_related 左結合で問合せし、両方のモデルを取得する。引数に結合先のModel名を指定する。1:1の場合に利用し、結果をVec<(Model, Option)>形式を返す
find_with_related 左結合で問合せし、両方のモデルを取得する。引数に結合先のModel名を指定する。 1:nの場合に利用し、結果をVec<(Model, Vec)>形式でk返す
inner_join
left_join
right_join
use crate::modules::prelude::*;
use crate::modules::{product, product_category};
impl ProductRepository {
    #[allow(dead_code)]
    async fn select_by_id_join_productt_category(&self, db: &DatabaseTransaction, id: i32) -> 
        Result<Vec<(product::Model, Option<product_category::Model>)>>
    {
        let product_and_category = Product::find_by_id(id)
            .find_also_related(ProductCategory)
            .all(db)
            .await?;
        Ok(product_and_category)
    }
}
  • 1:N結合 ✅ 2023-09-07
  • 1:1結合 ✅ 2023-09-06

SQLステートメント利用

  • 問合せの実行 ✅ 2023-09-07
  • レコードの追加 ✅ 2023-09-07
@friendbear friendbear added the learning Books and other studies label Sep 4, 2023
@friendbear friendbear self-assigned this Sep 4, 2023
This was referenced Sep 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
learning Books and other studies
Projects
None yet
Development

No branches or pull requests

1 participant