高瀬博道の技術ブログ

高瀬博道の技術ブログです。

NestJS でデータベース操作できるようにする - 3

前回

takasehiromichiex.com

スキーマ

Entityとしてモデルを定義するのとは別に、Entity Schemaで列の状態などを定義することができます。

Entity Schemaを作成してみます。

まず、Entityを修正します。

src/user/entities/user.entity.ts
import { Photo } from "src/photo/entities/photo.entity";

export class User {
  id: number;
  firstName: string;
  lastName: string;
  isActive: boolean;
  photos: Photo;
}

Entity Schemaを作成します。

src/user/user.schema.ts
import { EntitySchema } from "typeorm";
import { User } from "./entities/user.entity";

export const UserSchema = new EntitySchema<User>({
  name: "User",
  columns: {
    id: {
      type: Number,
      primary: true,
      generated: true,
    },
    firstName: {
      type: String,
    },
    lastName: {
      type: String,
    },
    isActive: {
      type: Boolean,
      default: true,
    },
  },
  relations: {
    photos: {
      type: "one-to-many",
      target: "Photo",
    },
  },
});

Photoも同様に対応します。

src/photo/entities/photo.entity.ts
import { User } from "src/user/entities/user.entity";

export class Photo {
  id: number;
  url: string;
  user: User;
}
src/photo/photo.schema.ts
import { EntitySchema } from "typeorm";
import { Photo } from "./entities/photo.entity";

export const PhotoSchema = new EntitySchema<Photo>({
  name: "Photo",
  columns: {
    id: {
      type: Number,
      primary: true,
      generated: true,
    },
    url: {
      type: String,
    },
  },
  relations: {
    user: {
      type: "many-to-one",
      target: "User",
    },
  },
});

ユーザモジュールに紐付けます。

src/user/user.module.ts
import { Module } from "@nestjs/common";
import { UserService } from "./user.service";
import { UserController } from "./user.controller";
import { TypeOrmModule } from "@nestjs/typeorm";
import { UserSchema } from "./user.schema";
import { PhotoSchema } from "src/photo/photo.schema";

@Module({
  imports: [TypeOrmModule.forFeature([UserSchema, PhotoSchema])],
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {}

Entity Schemaを組み込むことができました。

まとめ

ここまでで、

  • スキーマについて

を学ぶことができました。

次回もデータベース操作を掘り下げようと思います。

コード

今回のコードは、以下に格納しました。

github.com

takasehiromichiex.com