#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