Search code examples
nestjstypeorm

how to get typeorm manytomany relation column count


User Entity

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @ManyToMany(type => Product)
  @JoinTable()
  likedProducts: Product[]
}

Product Entity

export class Product {
  @PrimaryGeneratedColumn()[enter image description here][1]
  id: number;

  @Column()
  name: string;

  @ManyToMany(type => User)
  likedUsers: User[];
}

I would like to know the number of users who like certain products of Product Entity.

Table Image Example

TableImageExample

I want to get the number of columns with productId of 10. Under circumstances, you cannot move JoinTable.

I Tried

      const product = await this.products.findOne(id, {
        relations: ['likedUsers'],
      });
      console.log(product.likedUsers.length);

result

TypeError: Cannot read property 'tablePath' of undefined
    at /Users/apple/Documents/project/monster-backend/src/query-builder/SelectQueryBuilder.ts:1539:76
    at Array.map (<anonymous>)
    at SelectQueryBuilder.createJoinExpression (/Users/apple/Documents/project/monster-backend/src/query-builder/SelectQueryBuilder.ts:1498:57)
    at SelectQueryBuilder.getQuery (/Users/apple/Documents/project/monster-backend/src/query-builder/SelectQueryBuilder.ts:58:21)
    at SelectQueryBuilder.QueryBuilder.getQueryAndParameters (/Users/apple/Documents/project/monster-backend/src/query-builder/QueryBuilder.ts:440:28)
    at SelectQueryBuilder.<anonymous> (/Users/apple/Documents/project/monster-backend/src/query-builder/SelectQueryBuilder.ts:2092:40)
    at step (/Users/apple/Documents/project/monster-backend/node_modules/tslib/tslib.js:143:27)
    at Object.next (/Users/apple/Documents/project/monster-backend/node_modules/tslib/tslib.js:124:57)
    at /Users/apple/Documents/project/monster-backend/node_modules/tslib/tslib.js:117:75
    at new Promise (<anonymous>)

Solution

  • i think you need to tell typeorm the "relation property" in the ManyToMany decorator. like this: @ManyToMany(type => Product, product => product.likedUsers)

    same in the products entity.

    you can read more about it in the documentation