モデルの作成
このページでは、モデルの追加方法と、モデルに対応するクラスの利用方法について説明します。 Accellaでは、テーブル定義とマイグレーションにPrismaを、ORMにAccel Recordを使用しています。
モデルの追加手順
-
スキーマの編集
db/schema/main.prisma
がモデルのスキーマファイルになります。 ここに、モデルを追加していきます。ここでは、Userモデルを追加する例を示します。db/schema/main.prisma model User {id Int @id @default(autoincrement())firstName StringlastName Stringage Int?} -
マイグレーションの実行
Terminal window npx prisma migrate devこのコマンドを実行すると、以下の処理が行われます:
db/migrations/
ディレクトリ以下に、SQLマイグレーションファイルを生成します。- データベースを新規に作成し、SQLマイグレーションを実行します。
src/models/
ディレクトリ以下に、各モデルに対応したファイルが生成します。
以上で、モデルの追加が完了しました。
src/models/index.ts
から各モデルに対応したクラスをインポートして利用することができます。
テーブル操作のサンプル
上記の例では、Userモデルに対応したUserクラスが生成されます。 以下は、Userクラスを利用してCRUD処理を行うTypeScriptでのサンプルコードです。
import { User } from "src/models";
// Create a new userconst user: User = User.create({ firstName: "John", lastName: "Doe",});
// Update the useruser.update({ age: 26,});
// Get all usersfor (const user of User.all()) { console.log(user.firstName);}
// Find a userconst john: User | undefined = User.findBy({ firstName: "John", lastName: "Doe",});
// Delete the userjohn?.delete();
モデルに対応するクラスの拡張
上記の例では src/models/user.ts
ファイルに、Userモデルに対応したクラスが生成されます。
このクラスには自由にメソッドを追加することができます。
import { ApplicationRecord } from "./applicationRecord.js";
export class UserModel extends ApplicationRecord { // Define a method to get the full name get fullName(): string { return `${this.firstName} ${this.lastName}`; }}
以下のようにクラスへ定義したメソッドを呼び出すことができます。
import { User } from "src/models/index.js";
const user = User.create({ firstName: "John", lastName: "Doe",});
console.log(user.fullName); // => "John Doe"
関連ドキュメント
- 利用するデータベースの変更に関してはデータベース設定ページを参照してください。
- MySQLやPostgreSQLなど、SQLite以外のデータベースを利用する場合の設定方法が記載されています。
- スキーマの定義に関してはPrisma schemaを参照してください。
- モデルの詳細な定義方法や、リレーションの定義方法などが記載されています。
- ORMの詳細については、Accel Record READMEを参照してください。
- 豊富なクエリインターフェースや、型についての詳細なども記載されています。