#Relation help

6 messages · Page 1 of 1 (latest)

honest niche
#

I tried to make a relation between entities called "Onboarding" and "Choice", where both entities have "question_alias" column which is a string and it is used to reference which choices belongs to which question (from Onboarding).

My goal is to fetch Onboarding using .find with a relation option to join Choice, but then I got this query result:

#
SELECT 
  "Onboarding"."question_id" AS "Onboarding_question_id", 
  "Onboarding"."uuid" AS "Onboarding_uuid", 
  "Onboarding"."question_alias" AS "Onboarding_question_alias", 
  "Onboarding"."question" AS "Onboarding_question", 
  "Onboarding"."description" AS "Onboarding_description", 
  "Onboarding"."type" AS "Onboarding_type", 
  "Onboarding"."parent_question_alias" AS "Onboarding_parent_question_alias", 
  "Onboarding"."created_at" AS "Onboarding_created_at", 
  "Onboarding"."updated_at" AS "Onboarding_updated_at", 
  "Onboarding"."deleted_at" AS "Onboarding_deleted_at", 
  "Onboarding__Onboarding_choices"."choice_id" AS "Onboarding__Onboarding_choices_choice_id", 
  "Onboarding__Onboarding_choices"."uuid" AS "Onboarding__Onboarding_choices_uuid", 
  "Onboarding__Onboarding_choices"."choice_name" AS "Onboarding__Onboarding_choices_choice_name", 
  "Onboarding__Onboarding_choices"."choice_alias" AS "Onboarding__Onboarding_choices_choice_alias", 
  "Onboarding__Onboarding_choices"."question_alias" AS "Onboarding__Onboarding_choices_question_alias", 
  "Onboarding__Onboarding_choices"."created_at" AS "Onboarding__Onboarding_choices_created_at", 
  "Onboarding__Onboarding_choices"."updated_at" AS "Onboarding__Onboarding_choices_updated_at", 
  "Onboarding__Onboarding_choices"."deleted_at" AS "Onboarding__Onboarding_choices_deleted_at" 
FROM 
  "onboardings" "Onboarding" 
  LEFT JOIN "choices" "Onboarding__Onboarding_choices" ON "Onboarding__Onboarding_choices"."question_alias" = "Onboarding"."question_id" 
  AND (
    "Onboarding__Onboarding_choices"."deleted_at" IS NULL
  ) 
WHERE 
  "Onboarding"."deleted_at" IS NULL

#

The LEFT JOIN part trying to match question_alias with question_id, which is not what I want

#

here's the Onboarding entity:

@Entity({ name: 'onboardings' })
export class Onboarding {
    @PrimaryGeneratedColumn({ type: 'bigint' })
    question_id: number;

    @Column()
    @Generated('uuid')
    uuid: string;

    @Column({ length: 255 })
    question_alias: string;

    @Column({ length: 255 })
    question: string;

    @Column({ length: 500 })
    description: string;

    @Column({ length: 50 })
    type: string;

    @Column({ length: 255 })
    parent_question_alias: string;

    @Column({ default: () => 'CURRENT_TIMESTAMP(0)' })
    created_at: Date;

    @Column({ default: () => 'CURRENT_TIMESTAMP(0)', onUpdate: 'CURRENT_TIMESTAMP(0)' })
    updated_at: Date;

    @DeleteDateColumn({ nullable: true })
    deleted_at: Date;

    @OneToMany(() => Choice, (choice) => choice.onboarding)
    choices: Choice[];
}
#

here's the Choice entity:

@Entity({ name: 'choices' })
export class Choice {
    @PrimaryGeneratedColumn({ type: 'bigint' })
    choice_id: number;

    @Column()
    @Generated('uuid')
    uuid: string;

    @Column({ length: 255 })
    choice_name: string;

    @Column({ length: 255 })
    choice_alias: string;

    @Column()
    question_alias: string;

    @Column({ default: () => 'CURRENT_TIMESTAMP(0)' })
    created_at: Date;

    @Column({ default: () => 'CURRENT_TIMESTAMP(0)', onUpdate: 'CURRENT_TIMESTAMP(0)' })
    updated_at: Date;

    @DeleteDateColumn({ nullable: true })
    deleted_at: Date;

    @ManyToOne(() => Onboarding, (onboarding) => onboarding.choices)
    @JoinColumn({ name: 'question_alias' })
    onboarding: Onboarding;
honest niche
#

turns out I need to just add "referencedColumnName" to @JoinColumn option and put the desired column name 🤦‍♂️