Search code examples
typescriptpostgresqltypeormnode.js-typeorm

How to use leftJoinAndSelect query in TypeORM postgres?


I've been using TypeORM and made some Entities as follows:

  • User.ts

    @PrimaryGeneratedColumn()
    id: number
    
  • Post.ts

    @PrimaryGeneratedColumn()
    id: number
    
    @Column()
    userId: number
    

As I didn't want to make relations between User and Post entities, I just made a column named userId at Post.

Here's the question.

I'd like to join two tables and fetch data. But how can I use innerJoinAndSelect or leftJoinAndSelect?

Here's my code:

// getPost.ts

// Attempt 1
const first = await createQueryBuilder()
  .select('user')
  .from(User, 'user')
  .leftJoinAndSelect(Post, 'post', 'post.userId = user.id')
  .getMany() // only fetched User data without Post data

// Attempt 2
const second = await createQueryBuilder('user')
  .innerJoinAndSelect('user.id', 'userId')
  .innerJoinAndMap('user.id', Post, 'post', 'userId = post.userId')
  .getMany() // Bad request error

But None of these worked...

I'd like to join User with Post and grab all data (but not using relation). How could I get these data?


Solution

  • leftJoinAndMapOne should work. But you’ve just omitted first argument mapToProperty.

    Just fix your getPost.ts as this

    const first = await createQueryBuilder()
      .select(‘user’)
      .from(User, ‘user’)
      // ------------------------ fixed ------------------------
      .leftJoinAndMapOne(‘user.id’, Post, ‘post’, ‘post.userId = user.id’)
      // -------------------------------------------------------
      .getMany()