Reputation: 103
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
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