🐈
TypeORMでEntityを定義する基本知識
概要
TypeORMでデータベースのテーブルをマッピングするクラスを作成した際の備忘録です
これから導入される方や初めて使う方の参考になれば幸いです
用語の説明
TypeORMとは
TypeORMは、NodeJS、Browser、Cordova、PhoneGap、Ionic、React Native、NativeScript、Expo、Electronの各プラットフォームで動作し、TypeScriptとJavaScript(ES5, ES6, ES7, ES8)で使用できるORMです
Entityの定義(解説)
今回使用するmoduleとserviceをimportする
Contractor.ts
import {
Column,
PrimaryGeneratedColumn,
CreateDateColumn,
Timestamp,
UpdateDateColumn,
DeleteDateColumn,
Entity,
OneToMany,
OneToOne,
JoinColumn,
} from 'typeorm'
サービス | 説明 |
---|---|
Column | テーブルカラム |
PrimaryGeneratedColumn | 自動増減の主キーカラム |
CreateDateColumn | データ挿入時に自動で設定されるカラム |
Timestamp | カラムのデータ型で使用 |
UpdateDateColumn | データ更新時に自動で設定されるカラム |
Entity | クラスがEntityであることを定義 |
OneToMany | 1対多/多対1の関係を定義するカラム |
OneToOne | 1対1の関係を定義するカラム |
JoinColumn | 外部キーを持つカラムを定義する |
1対多・1対1がピントこない方はこちらに目を通してみてください
作成するテーブル名を定義する
Contractor.ts
@Entity('contractors')
主キーを定義します
Contractor.ts
@PrimaryGeneratedColumn({
name: 'id',
unsigned: true,
type: 'smallint',
comment: '契約ID',
})
readonly id: number
NUllを許容するカラム(Nullable)を定義します
Contractor.ts
@Column('varchar', { comment: '登録者', nullable: true })
ins_admin_user_id: string | null = null
リレーションを定義します
Contractor.ts
@OneToOne(() => Plan, (plan) => plan.contractor, {
createForeignKeyConstraints: false,
persistence: false,
})
@JoinColumn({
name: 'plan_id',
referencedColumnName: 'id',
})
readonly plan?: Plan
/*
// 契約プランのEntity定義
@OneToOne(() => Contractor, (contractor) => contractor.plan, {
createForeignKeyConstraints: false,
persistence: false,
})
readonly contractor?: Contractor
*/
Contractor.ts
@OneToMany(() => Terminal, (terminal) => terminal.contractor, {
createForeignKeyConstraints: false,
persistence: false,
})
readonly terminals?: Terminal[]
/*
// 端末のEntity定義
@ManyToOne(() => Contractor, (contractor) => contractor.terminals, {
createForeignKeyConstraints: false,
persistence: false,
})
@JoinColumn({
name: 'contractor_id',
referencedColumnName: 'id',
})
readonly contractor?: Contractor
*/
constractorを定義します
Contractor.ts
constructor(
name: string,
terminal_activate_possible_count: number,
license_period_days: number,
archive_period_days: number,
ins_admin_user_id: string | null,
upd_admin_user_id: string | null,
delete_admin_user_id: string | null,
delete_flg: boolean
) {
this.name = name
this.terminal_activate_possible_count = terminal_activate_possible_count
this.license_period_days = license_period_days
this.archive_period_days = archive_period_days
this.ins_admin_user_id = ins_admin_user_id
this.upd_admin_user_id = upd_admin_user_id
this.delete_flg = delete_flg
this.delete_admin_user_id = delete_admin_user_id
}
コード全文
Contractor.ts
import {
Column,
PrimaryGeneratedColumn,
CreateDateColumn,
Timestamp,
UpdateDateColumn,
DeleteDateColumn,
Entity,
OneToMany,
OneToOne,
JoinColumn,
} from 'typeorm'
@Entity('contractors')
export class Contractor {
@PrimaryGeneratedColumn({
name: 'id',
unsigned: true,
type: 'smallint',
comment: '契約ID',
})
readonly id: number
@Column('varchar', { comment: '会社名' })
organization_name: string
@CreateDateColumn({ comment: '登録日時' })
readonly ins_ts?: Timestamp
@Column('varchar', { comment: '登録者', nullable: true })
ins_admin_user_id: string | null = null
@UpdateDateColumn({ comment: '最終更新日時' })
readonly upd_ts?: Timestamp
@Column('varchar', { comment: '更新者', nullable: true })
upd_admin_user_id: string | null = null
@DeleteDateColumn({ comment: '削除日時' })
readonly delete_ts?: Timestamp
@Column('varchar', { comment: '削除者', nullable: true })
delete_admin_user_id: string | null = null
@OneToOne(() => Plan, (plan) => plan.contractor, {
createForeignKeyConstraints: false,
persistence: false,
})
@JoinColumn({
name: 'plan_id',
referencedColumnName: 'id',
})
readonly plan?: Plan
@OneToMany(() => Terminal, (terminal) => terminal.contractor, {
createForeignKeyConstraints: false,
persistence: false,
})
readonly terminals?: Terminal[]
constructor(
organization_name: string,
ins_admin_user_id: string | null,
upd_admin_user_id: string | null,
delete_admin_user_id: string | null,
plan_id: number,
) {
this.organization_name = organization_name
this.ins_admin_user_id = ins_admin_user_id
this.upd_admin_user_id = upd_admin_user_id
this.delete_admin_user_id = delete_admin_user_id
this.plan_id = plan_id
}
}
参考文献
最後に
読んでいただきありがとうございます。
今回の記事はいかがでしたか?
・こういう記事が読みたい
・こういうところが良かった
・こうした方が良いのではないか
などなど、率直なご意見を募集しております。
Discussion