#node.js #typeorm
#node.js #typeorm
Вопрос:
У меня есть 3 таблицы следующим образом:
- Пользователи:
id
- семьи:
id
- family_users:
familyId | userId
У меня есть эти отношения:
// User
@OneToMany(() => FamilyUser, (familyUser) => familyUser.user)
familyUsers: FamilyUser[];
// Family
@OneToMany(() => FamilyUser, (familyUser) => familyUser.family)
familyUsers: FamilyUser[];
// FamilyUser
@ManyToOne(() => User, (user) => user.familyUsers, { nullable: false })
user: User;
@ManyToOne(() => Family, (family) => family.familyUsers, { nullable: false })
family: Family;
Я хочу получить семейный список конкретного пользователя. Первый вариант:
await this.familiesUsersRepository.find({
relations: ['family'],
where: {
user: { id: 6 },
},
});
Но в этом случае я получаю список FamilyUser
s, каждый из которых содержит объект семейства. Но я хочу вернуть список семейств, который принадлежит пользователю. Я пробовал это:
return await this.familiesRepository.find({
relations: ['familyUsers', 'familyUsers.user'],
where: {
// ???
},
});
Но понятия не имею, что я должен указать в предложении where. Есть идеи?
Ответ №1:
Я не знаю, понял ли я ваш вопрос, но я думаю, что вы можете вернуть семейство одного пользователя, просто перейдя из UserRepository :
let idUser = 6 ;
return await this.userRepository.findOne(idUser,{relations: ['familyUsers']});
ОБНОВЛЕНО
return await this.familyRepository.createQueryBuilder('family')
.leftJoinAndSelect('family.familyUsers', 'familyusers')
.where("familyusers.user = :idUser", { idUser }) // if familyusers.user doesn't work replace 'user' with the name of colmun in the table
.getMany()
Комментарии:
1. Спасибо за ваш ответ. Но он не только не возвращает family в качестве основного объекта (основным объектом является пользовательский ресурс), но и вообще не возвращает family.
2. Что я понял из вашего комментария, так это то, что вы хотите вернуть список членов семьи в качестве основного объекта, верно?
3. Спасибо. хотя в этом есть синтаксическая ошибка, но я понял вашу точку зрения. Спасибо
4. вы можете обновить мой ответ точным синтаксисом для других пользователей, удачи