shaudo
shaudo

Reputation: 103

TypeORM - Problem with LEFT JOIN/ INNER JOIN between 3 related tables

so I have problem which I can't handle, maybe You could help me. So: I have three entities - User, Team, UserTeam which contain (userId,teamId, teamRole). UserTeam is entity which contain composite primary key. like on code below:

@Index(["teamId", "userId"], { unique: true })
export class UserTeam {

    @PrimaryColumn("int")
    userId = undefined;

    @PrimaryColumn("int")
    teamId = undefined;

    @ManyToOne(type => Team)
    team = undefined;

    @ManyToOne(type => User)
    user = undefined;

    @Column({
        type: 'enum',
        enum: ['CAPITAN', 'PLAYER'],

    })
    teamRole = "";
}
export class Team {

    @PrimaryGeneratedColumn()
    id = undefined; 
@OneToMany(type => UserTeam, userTeam => userTeam.user)
    userTeams = undefined;
export class User {

    @PrimaryGeneratedColumn()
    id = undefined;

    @OneToMany(type => UserTeam, userTeam => userTeam.team)
    teams = undefined;
} 

So -> I'd like to create query which gonna return me all players (users) from specific team. so I create a query like eq ({team_id: 1, players: {userId:1, userId:21,userId:34} (Instead of ids I'd like to have objects its just example.

getRepository(Team).createQueryBuilder("team")
            .leftJoin("team.users", "userTeam")
            .leftJoin("userTeam.user", "user")
            .getMany()

which returns me QUERY:

SELECT "team"."id" AS "team_id", "team"."name" AS "team_name", "team"."shortcut" AS "team_shortcut", "team"."nationality" AS "team_nationality", "team"."description" AS "team_description", "team"."imagePath" AS "team_imagePath", "team"."division" AS "team_division" FROM "team" "team" LEFT JOIN "user_team" "userTeam" ON "userTeam"."userId"="team"."id"  LEFT JOIN "user" "user" ON "user"."id"="userTeam"."userId"

And the problem is there because I have

 LEFT JOIN "user_team" "userTeam" ON "userTeam"."userId"="team"."id"```

Instead of

userTeam.teamId=team.id

Do you have any ideas how to fix my problem? I'm gonna be really glad for any advices and tips.

Upvotes: 4

Views: 8566

Answers (1)

shaudo
shaudo

Reputation: 103

Problem resolved. I had reverse relation. I should have

@OneToMany(type => UserTeam, userTeam => userTeam.user)
    teams = undefined;

@OneToMany(type => UserTeam, userTeam => userTeam.team)
    users = undefined;

Upvotes: 2

Related Questions