@lookingfor2

Как правильно сделать выборку из бд с помощью typeorm?

Есть 2 таблицы
create table users(
  id serial,
  name text,
  organization_id integer,
  activated boolean
);

insert into users(name, activated, organization_id) values('Вася', true, '1'),('Петя', false, '2');

create table bank_props(
  id serial,
  user_id int,
  bik text,
  inn text,
  kpp text,
  individual_guid text,
  created_at timestamp,
  active boolean
);

insert into bank_props(user_id, bik, inn, kpp, individual_guid, created_at, active) 
values
(1, '123', '123', '123', '444', now() - interval '1 day', true),
(1, '123', '123', '123', '445', now() - interval '3 day', true),
(1, '123', '123', '123', '446', now() - interval '2 day', false),
(2, '124', '124', '124', '447', now() - interval '1 day', true),
(2, '124', '124', '124', '448', now() - interval '3 day', true),
(2, '124', '124', '124', '449', now() - interval '2 day', false);


Мне нужно получить ответ такого вида.
Отсортировать зависимую таблицу bank_props по created_at и взять первый вариант
[
{
  user_id:1,
  "bank_props": [
    {
      "bik": "string",
      "inn": "string",
      "kpp": "string",
      "individual_guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    }
  ],

},
{
  user_id:2,
  "bank_props": [
    {
      "bik": "string",
      "inn": "string",
      "kpp": "string",
      "individual_guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    }
  ],

}
]


я думал можно сделать через subquery как то, но не могу понять как

  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 1
@justmavi
Software Development Engineer at Softconstruct
Можно. Нужно объявить связь между таблицами. Я надеюсь, у вас там есть модели.

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  public id: number;

  // ...

  @OneToMany(() => BankProp, (prop) => prop.user)
  public bankProps: Array<BankProp>;
}

@Entity()
export class BankProp {
  @PrimaryGeneratedColumn()
  public id: number;

  @Column()
  public userId: number;
  
  @ManyToOne(() => User, (user) => user.bankProps)
  public user: User;

  // ...
}

///

const result = await userRepository.find({
  relations: {
    bankProps: true
  }
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы