Введите или найдите с помощью where на другой стороне отношения

#node.js #typeorm

#node.js #typeorm

Вопрос:

У меня есть 3 таблицы следующим образом:

  1. Пользователи:

    id

  2. семьи:

    id

  3. 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. вы можете обновить мой ответ точным синтаксисом для других пользователей, удачи