Search code examples
node.jsnpmtypeorm

How should I write typeorm entity and find code?


I created two tables. One is a user and the other is a friend table that has relationships between users.

The friend table was created to resolve the many-to-many relationship between users.

How can I create a typeorm entity and retrieve data in the form below?

{
    "id": "1000014",
    "name": "fu",
    "address": aasd,
    "createdTime": "2023-03-09T01:00:00.000Z",
    "updatedTime": "2023-03-09T09:11:18.243Z",
    "friends": [
      {
        "id": "5",
        "name": "kaka",
        "address": asdf,
        "createdTime": "2023-03-09T01:00:00.000Z",
        "updatedTime": "2023-03-09T09:11:18.243Z"
      },
      {
        "id": "6",
        "name": "lod",
        "address": asdf,
        "createdTime": "2023-03-09T01:00:00.000Z",
        "updatedTime": "2023-03-09T09:11:18.243Z"
      },
      {
        "id": "7",
        "name": "asdf",
        "address": asdf,
        "createdTime": "2023-03-09T01:00:00.000Z",
        "updatedTime": "2023-03-09T09:11:18.243Z"
      },
      {
        "id": "8",
        "name": "qwer",
        "address": asdf,
        "createdTime": "2023-03-09T01:00:00.000Z",
        "updatedTime": "2023-03-09T09:11:18.243Z"
      },
      {
        "id": "9",
 
        "name": "qwer",
        "address": dasfsdf,
        "createdTime": "2023-03-09T01:00:00.000Z",
        "updatedTime": "2023-03-09T09:11:18.243Z"
      }
    ]
  },
  {
    "id": "1000120",
    "name": "asdvv",
    "address": asdf,
    "createdTime": "2023-03-08T15:00:00.000Z",
    "updatedTime": "2023-03-09T09:11:18.243Z",
    "friends": [
      {

Solution

  • Assuming you have already created the necessary tables in your database, you can create two entities in TypeORM for the User and Friend tables.

    User Entity:

    import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable } from 'typeorm';
    import { Friend } from './friend.entity';
    
    @Entity()
    export class User {
      @PrimaryGeneratedColumn()
      id: number;
    
      @Column()
      name: string;
    
      @Column()
      address: string;
    
      @Column()
      createdTime: Date;
    
      @Column()
      updatedTime: Date;
    
      @ManyToMany(() => Friend)
      @JoinTable({
        name: 'user_friend',
        joinColumn: { name: 'user_id', referencedColumnName: 'id' },
        inverseJoinColumn: { name: 'friend_id', referencedColumnName: 'id' },
      })
      friends: Friend[];
    }

    Friend Entity:

    import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
    
    @Entity()
    export class Friend {
      @PrimaryGeneratedColumn()
      id: number;
    
      @Column()
      name: string;
    
      @Column()
      address: string;
    
      @Column()
      createdTime: Date;
    
      @Column()
      updatedTime: Date;
    }

    After creating the entities, you can use TypeORM to retrieve the data in the required format using a query like this:

    import { getRepository } from 'typeorm';
    import { User } from './entities/user.entity';
    
    async function getUsersWithFriends(): Promise<User[]> {
      const userRepository = getRepository(User);
      const users = await userRepository.find({ relations: ['friends'] });
      return users;
    }