前回
PhotoMetadataの作成
新しいモデルを作成してみます。
src/entity/PhotoMetadata.ts
import { Photo } from "./Photo"; export class PhotoMetadata { id: number; height: number; width: number; oriientation: string; compressed: boolean; comment: string; photo: Photo; }
上記のようなモデルを作成した後に、アノテーションをつけてエンティティにします。
src/entity/PhotoMetadata.ts
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; import { Photo } from "./Photo"; @Entity() export class PhotoMetadata { @PrimaryGeneratedColumn() id: number; @Column("int") height: number; @Column("int") width: number; @Column() oriientation: string; @Column() compressed: boolean; @Column() comment: string; photo: Photo; }
1対1の関係
ここで、1対1の関係になるようにアノテーションをつけます。
src/entity/PhotoMetadata.ts
import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn, } from "typeorm"; import { Photo } from "./Photo"; @Entity() export class PhotoMetadata { @PrimaryGeneratedColumn() id: number; @Column("int") height: number; @Column("int") width: number; @Column() oriientation: string; @Column() compressed: boolean; @Column() comment: string; @OneToOne(() => Photo) @JoinColumn() photo: Photo; }
@OneToOne(() => Photo)
と、@JoinColumn()
を追加しています。
データソースにも追加します。
src/data-source.ts
import "reflect-metadata"; import { DataSource } from "typeorm"; import { Photo } from "./entity/Photo"; import { PhotoMetadata } from "./entity/PhotoMetadata"; import { User } from "./entity/User"; export const AppDataSource = new DataSource({ type: "mysql", host: "localhost", port: 3306, username: "test", password: "test", database: "test", synchronize: true, logging: true, entities: [Photo, User, PhotoMetadata], migrations: [], subscribers: [], });
この状態でnpm start
すると、以下のテーブルが追加されています。
mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | photo | | photo_metadata | | user | +----------------+ 3 rows in set (0.00 sec) mysql> show columns from photo_metadata; +--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | height | int | NO | | NULL | | | width | int | NO | | NULL | | | oriientation | varchar(255) | NO | | NULL | | | compressed | tinyint | NO | | NULL | | | comment | varchar(255) | NO | | NULL | | | photoId | int | YES | UNI | NULL | | +--------------+--------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec)
まとめ
ここまでで、
- PhotoMetadataの作成について
- 1対1の関係について
を学びました。
次回は1対1の関係の保存を掘り下げようと思います。
コード
今回のコードは、以下に格納しました。