Search code examples
mysqltypeorm

typeorm "\"user\" alias was not found. Maybe you forgot to join it?"


I'm learning typeorm.
and I have a problem. Please help me

@Entity('user')
export class User extends BaseEntity {

  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: 'varchar', length: '100', unique: true })
  email: string;

  @Column({ type: 'varchar', length: '10', unique: true })
  nickname: string;

  @Column({ type: 'varchar', length: '100' })
  password: string;

  @CreateDateColumn({ name: 'created_at' })
  createdAt: Date;

  @UpdateDateColumn({ name: 'updated_at' })
  updatedAt: Date;

  // One to One
  @Column({ nullable: true })
  avatarId: number;

  @OneToOne(() => Avatar)
  @JoinColumn()
  avatar: Avatar;
}

this is my User Enitity

@Entity('avatar')
export class Avatar extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: 'varchar', length: '255' })
  src: string;
}

and this is my Avatar Entity

I want to join them and call, so My querybuilder is

const createdUser = await createQueryBuilder('user')
    .leftJoinAndSelect('user.avatar', 'avatar')
    .where('user.email = :email', { email })
    .getOne();

but when I execute this, error is coming

"\"user\" alias was not found. Maybe you forgot to join it?"

I don't know where is error
I search docs and googling,
(I can't speak english well, it's hard...)
Please Help me what is fault


Solution

  • Try to add a condition to your join:

    .leftJoinAndSelect('user.avatar', 'avatar', 'avatar.id = user.avatarId')
    

    or/and inverse side to the avatar column in the user entity

      @OneToOne(() => Avatar, data => data.user)
      @JoinColumn()
      avatar: Avatar;