cargo new --bin
でバイナリプロジェクトを作成して、Cargo.toml
をこんな感じに編集します。prisma-client-rust
はcrates.ioでは提供されていないため、gitリポジトリを指定する必要があります(参考: https://github.com/Brendonovich/prisma-client-rust/issues/76 )。features
には使用するデータベースの他に他ライブラリとの統合機能を指定できます。ここではpostgresqlとmigration機能を指定しました。rspc
featureがあります。rspcはRust版trpcみたいなやつで、Rustの型からTypescriptの型を吐き出してフロントエンドで使用することができます。そしてrspc
featureを指定することで必要なものをderiveしてくれるわけです。cargo prisma
コマンドを使用することができるようになります。prisma
フォルダを作成し、その中にschema.prisma
とmigrations
フォルダを作成します。cargo prisma generate
を実行することでsrc/prisma.rs
が生成されます。このファイルはデバイス固有のものなので.gitignore
に含めるべきです。PrismaClient
を作成することでデータベースにアクセスできます。開発時には_db_push
メソッドを使ってschemaの変更を直接反映させます。実際にはaxum
のstateなどにArc<PrismaClient>
として入れることになるでしょう。prisma migrate dev
コマンドを使用してマイグレーション用sqlを生成した上でそれらを適用します。prisma.schema
を使うことにします。.with()
とfetch
を使うinclude!()
マクロを使用するSelect & Include – Prisma Client Rust
prisma.brendonovich.dev
include
メソッドに使用できるstructを生成することで型安全かつ簡潔にリレーションの取得を記述することができます。post_with_comments::Data
型の値が返ってきます。include!()
マクロに似たselect!()
マクロを使用することで一部の列のみを取得することができます。