Loading episodes…
0:00 0:00

Setup TypeORM

00:00
BACK TO HOME

Setup TypeORM

10xTeam September 25, 2022 7 min read

Update the src/models/Profile.ts file by importing CreateDateColumn, OneToMany and the entities:

import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn } from 'typeorm'; 
import { OneToMany } from 'typeorm'; 
import { Post } from './Post'; 
import { Comment } from './Comment'; 
import { Like } from './Like'; 

@Entity() 
export class Profile { 

  @PrimaryGeneratedColumn() id: number; 
  @Column() name: string; 
  @Column("text", { nullable: true }) about: string; 
  @Column({ nullable: true }) avatar: string; 
  @Column({ nullable: true }) coverImage: string; 
  @Column({ default: 0 }) numberOfPosts: number; 

  @Column({ unique: true }) email: string; 
  @Column({ unique: true }) username: string; 
  @Column() password: string; 
} 

Next, add the createdAt field and relations as follows:

import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn } from 'typeorm'; 
import { OneToMany } from 'typeorm'; 
import { Post } from './Post'; 
import { Comment } from './Comment'; 
import { Like } from './Like'; 

@Entity() 
export class Profile { 

  @PrimaryGeneratedColumn() id: number; 
  @Column() name: string; 
  @Column("text", { nullable: true }) about: string; 
  @Column({ nullable: true }) avatar: string; 
  @Column({ nullable: true }) coverImage: string; 
  @Column({ default: 0 }) numberOfPosts: number; 

  @Column({ unique: true }) email: string; 
  @Column({ unique: true }) username: string; 
  @Column() password: string; 
  
  @OneToMany(type => Post, post => post.author) posts: Post[]; 
  @OneToMany(type => Comment, comment => comment.author) comments: Comment[]; 
  @OneToMany(type => Like, like => like.profile) likes: Like[]; 
  
  @CreateDateColumn() createdAt: Date; 
} 

Next, update the src/models/Post.ts file as follows:

import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn } from 'typeorm'; 
import { OneToOne, OneToMany, ManyToOne, JoinColumn } from 'typeorm'; 

import { Profile } from './Profile'; 
import { Comment } from './Comment'; 
import { Like } from './Like'; 

@Entity() 
export class Post { 
  @PrimaryGeneratedColumn() id: number; 
  @Column("longtext") content: string; 
  @Column({ nullable: true }) image: string; 
  @Column({ default: 0 }) numberOfComments: number; 
  @Column({ default: 0 }) numberOfLikes: number; 
  
  @OneToOne(type => Comment, comment => comment.post, { onDelete: 'SET NULL' })  
  @ManyToOne(type => Profile, profile => profile.posts, { onDelete: 'CASCADE' }) author: Profile;   
  @OneToMany(type => Comment, comment => comment.post) comments: Comment[]; 
  @OneToMany(type => Like, like => like.post) likes: Like[]; 
  
  @CreateDateColumn() createdAt: Date;  
} 

Next, update the src/models/Comment.ts file as follows:

import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn } from 'typeorm'; 
import { ManyToOne } from 'typeorm'; 
import { Profile } from './Profile'; 
import { Post } from './Post'; 

@Entity() 
export class Comment { 

  @PrimaryGeneratedColumn() id: number; 
  @Column("text") content: string; 
  
  @ManyToOne(type => Profile, profile => profile.comments, { onDelete: 'CASCADE' }) 
  author: Profile;   
  @ManyToOne(type => Post, post => post.comments, { onDelete: 'CASCADE' }) 
  post: Post; 
  
  @CreateDateColumn() createdAt: Date; 
} 

The user and post entities that we wish to associate with in this case, together with the many-to-one decorator, were imported.

Then, we’ve added fields, author and post, with the annotation @ManyToOne. This suggests that a post may receive numerous comments and that a single user may submit numerous comments. These are the inverse relationships for the user and post entities that have been specified.

Next, update the src/models/Like.ts file as follows:

import { Entity, PrimaryGeneratedColumn, CreateDateColumn } from 'typeorm'; 
import { ManyToOne } from 'typeorm'; 
import { Profile } from './Profile'; 
import { Post } from './Post'; 

@Entity('likes') 
export class Like { 
  @PrimaryGeneratedColumn() id: number; 
  
  @ManyToOne(type => Profile, profile => profile.likes, { onDelete: 'CASCADE' }) 
  profile: Profile;   

  @ManyToOne(type => Post, post => post.likes, { onDelete: 'CASCADE' }) 
  post: Post; 
  
  @CreateDateColumn() createdAt: Date; 
} 

Join the 10xdev Community

Subscribe and get 8+ free PDFs that contain detailed roadmaps with recommended learning periods for each programming language or field, along with links to free resources such as books, YouTube tutorials, and courses with certificates.

Audio Interrupted

We lost the audio stream. Retry with shorter sentences?