Как исключить столбец из сущности typeorm и может быть необязательно, чтобы получить столбец с помощью метода поиска

#typescript #postgresql #nestjs #typeorm

Вопрос:

 import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";

@Entity()
export class User {

@PrimaryGeneratedColumn()
id: number;

@Column()
name: string;

@Column()
password: string;
}
 

мне не нужен пароль здесь, потому что я хочу вернуться к клиенту:

 const user = await User.find({where:{name:"test"}})
 

когда я хочу изменить пароль, мне нужен пароль:

 const user = await User.findOne({where:{name:"test"}})
user.password="password";
await user.save()
 

есть ли какое-либо решение с помощью методов Find,FindAndCount или даже findOne?

Как мне следует поступить?

Ответ №1:

Вы можете добавить опцию выбора в свой @Column декоратор внутри объекта, как это:

 import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";

@Entity()
export class User {

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column({select: false})
  password: string;
}
 

Таким образом, вы не получите поле пароля от модели, если сделаете find это . Вам придется явно выполнить addSelect использование QueryBuilder .

Ссылка: https://typeorm.io/#/select-query-builder/hidden-columns

Комментарии:

1. спасибо за ваш ответ. можно ли передать аргументы метода поиска createQueryBuilder().where(args) ? потому что я написал некоторые функции для сортировки и фильтрации параметров метода динамического поиска. @рахул-шарма

2. find и QueryBuillder where принимаем аргументы по-разному. Передача json, для которого вы написали find , createQueryBuilder().where будет невозможна, я думаю. Вы всегда можете написать любой запрос, который вы написали find с помощью QueryBuilder . Вам нужно будет указать фильтры where и выполнить сортировку с помощью sort метода.

3. да ,совершенно верно, я, наконец, удаляю поле пароля из возвращаемого массива в Find() с помощью оператора карты RXJS технически после получения всех полей из базы данных

Ответ №2:

Если вы не хотите применять select: false к столбцу в сущности, другой вариант-выборочно вводить столбцы в методе поиска только те, которые вам нужны

 this.ManagementUnitRepository.find({
  select: ["id", "name"]
});
 

Комментарии:

1. Спасибо вам за ваше решение @Awais Nasir