タイプORMアクティビティの使用-ログモード
開始します。
TypeORMを使用する方法はdata-mapper, active-recode
モードがあります.この記事ではActive Recodeを紹介しています.
Active Recodeモードを使用する理由
現在進行中のプロジェクトは規模が大きく、複雑ではないため、Active Recordモードを使用して迅速に開発し、その後、Active Recordモードを使用して、再構築中にデータ・マッパ・モードが必要な場合に移行します.
Active Recordとは?
各エンティティ定義のクエリー・メソッドを使用して、データベース内のエンティティ・オブジェクトのモードにアクセスします.エンティティファイルは、find、saveなどの基本機能を提供するBaseEntityを継承する必要があります.
現在進行中のプロジェクトは規模が大きく、複雑ではないため、Active Recordモードを使用して迅速に開発し、その後、Active Recordモードを使用して、再構築中にデータ・マッパ・モードが必要な場合に移行します.
Active Recordとは?
各エンティティ定義のクエリー・メソッドを使用して、データベース内のエンティティ・オブジェクトのモードにアクセスします.エンティティファイルは、find、saveなどの基本機能を提供するBaseEntityを継承する必要があります.
BaseEntity
は、repository
のすべての標準機能を有するため、repository, EntityManager
を使用する必要はない.コードの使用
公式ドキュメントコードを表示するには、ここです。を参照してください.
entity/mapping.ts
import {Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, Timestamp, ManyToOne, JoinColumn, OneToMany, BaseEntity} from "typeorm";
import { Alarm } from './Alarm';
import {BabySitter} from './BabySitter'
import {Parent} from './Parent'
import { WorkDiary } from './WorkDiary';
@Entity()
export class Mapping extends BaseEntity {
@PrimaryGeneratedColumn()
mappingId: number;
@CreateDateColumn({})
createdAt: Timestamp
// 1: 매핑된거 2: 대기 3: 거절
@Column({default : 2})
status : number
// mapping(N) <-> baby sitter(1)
@ManyToOne(
() => BabySitter,
babySitter => babySitter.mapping, { nullable: false, onDelete: 'CASCADE' })
@JoinColumn({name: "bsId"})
babySitter : BabySitter
// mapping(N) <-> baby parent(1)
@ManyToOne(
() => Parent,
parent => parent.mapping, { nullable: false, onDelete: 'CASCADE' }
)
@JoinColumn({name: "parentId"})
parent : Parent
// Mapping(1) <-> Alarm(N)
@OneToMany(
() => Alarm,
alarm => alarm.mapping,{ nullable: false, onDelete: 'CASCADE' }
)
alarm: Alarm[];
// Mapping(1) <-> WorkDiary(N)
@OneToMany(
() => WorkDiary,
workDiary => workDiary.mapping,{ nullable: false, onDelete: 'CASCADE' }
)
diary: WorkDiary[];
// 부모 ID를 기준으로 매핑되어 있는 보모 정보를 반환
static async findMappingList(parentId: number) {
return await this.createQueryBuilder("mapping")
.leftJoinAndSelect("mapping.babySitter", "babySitter")
.where("mapping.parentId = :parentId", { parentId: parentId })
.getMany();
}
// 이미 동일한 요청이 있는 경우 체크하기 위한 함수
static async checkDuplicate(parentId: number, bsId: number){
return await this.createQueryBuilder("mapping")
.where("mapping.parentId = :parentId", {parentId:parentId})
.andWhere("mapping.bsId = :bsId", {bsId:bsId})
.getMany();
}
}
import {Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, Timestamp, ManyToOne, JoinColumn, OneToMany, BaseEntity} from "typeorm";
import { Alarm } from './Alarm';
import {BabySitter} from './BabySitter'
import {Parent} from './Parent'
import { WorkDiary } from './WorkDiary';
@Entity()
export class Mapping extends BaseEntity {
@PrimaryGeneratedColumn()
mappingId: number;
@CreateDateColumn({})
createdAt: Timestamp
// 1: 매핑된거 2: 대기 3: 거절
@Column({default : 2})
status : number
// mapping(N) <-> baby sitter(1)
@ManyToOne(
() => BabySitter,
babySitter => babySitter.mapping, { nullable: false, onDelete: 'CASCADE' })
@JoinColumn({name: "bsId"})
babySitter : BabySitter
// mapping(N) <-> baby parent(1)
@ManyToOne(
() => Parent,
parent => parent.mapping, { nullable: false, onDelete: 'CASCADE' }
)
@JoinColumn({name: "parentId"})
parent : Parent
// Mapping(1) <-> Alarm(N)
@OneToMany(
() => Alarm,
alarm => alarm.mapping,{ nullable: false, onDelete: 'CASCADE' }
)
alarm: Alarm[];
// Mapping(1) <-> WorkDiary(N)
@OneToMany(
() => WorkDiary,
workDiary => workDiary.mapping,{ nullable: false, onDelete: 'CASCADE' }
)
diary: WorkDiary[];
// 부모 ID를 기준으로 매핑되어 있는 보모 정보를 반환
static async findMappingList(parentId: number) {
return await this.createQueryBuilder("mapping")
.leftJoinAndSelect("mapping.babySitter", "babySitter")
.where("mapping.parentId = :parentId", { parentId: parentId })
.getMany();
}
// 이미 동일한 요청이 있는 경우 체크하기 위한 함수
static async checkDuplicate(parentId: number, bsId: number){
return await this.createQueryBuilder("mapping")
.where("mapping.parentId = :parentId", {parentId:parentId})
.andWhere("mapping.bsId = :bsId", {bsId:bsId})
.getMany();
}
}
controllers/mapping.ts
import { NextFunction, Request, Response } from 'express';
import { BabySitter } from '../entity/BabySitter';
import { Mapping } from '../entity/Mapping';
const findParentList = async (req:Request, res: Response, next: NextFunction) => {
try{
const bsId : number = +req.params.bsId;
await BabySitter.findById(bsId)
const result = await Mapping.findMappingParentList(bsId);
}
export default{
findParentList
}
controllers/babysitter.ts
const inputBSInfo = async (req:Request, res:Response, next:NextFunction) => {
const {age, gender, region, career} : BsInputInfo = req.body
// req.params.userId -> string이라 number로 변환
const userId: number = +req.params.userId;
const user = await User.findOne({userId: userId});
const bs = new BabySitter();
bs.age = age;
bs.gender = gender;
bs.region = region;
bs.career= career;
bs.user = user;
await bs.save()
}
BaseEntity
の機能を継承し、save()
を使用してentityオブジェクトReference
この問題について(タイプORMアクティビティの使用-ログモード), 我々は、より多くの情報をここで見つけました https://velog.io/@0__h0__/TypeORM-Active-record-패턴-사용해보기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol