Рассмотрим этот объект:
// account.ts
import { Entity, PrimaryGeneratedColumn, PrimaryColumn, Column, BaseEntity, Index, CreateDateColumn, UpdateDateColumn, OneToOne, JoinColumn } from 'typeorm'
@Entity()
export class Account extends BaseEntity {
@PrimaryGeneratedColumn()
id: number
@Column({ length: 50, unique: true })
@Index({ unique: true })
accountIdentifier: string
@Column({ nullable: true, length: 100 })
name?: string
}
Чтобы сохранить новый account
или вернуть существующий account
, у нас есть этот рабочий код:
const knownAccount = await Account.findOne({ accountIdentifier: token.oid })
if (knownAccount) return done(null, knownAccount, token)
const account = new Account()
account.accountIdentifier = token.oid
account.name = token.name
account.userName = (token as any).preferred_username
const newAccount = await account.save()
return done(null, newAccount, token)
В docs в нем говорится:
save - Сохраняет заданный объект или массив объектов. Если объект уже существует в базе данных, он обновляется. Если объект не существует в базе данных, он вставляется. Он сохраняет все заданные объекты в одной транзакции (в случае объекта менеджер не является транзакционным). Также поддерживает частичное обновление, так как все неопределенные свойства пропускаются. Возвращает сохраненный объект / объекты.
Таким образом, мы ожидаем, что этот код будет работать и заменить предыдущий код, но он, похоже, не обновляет строку, а скорее жалуется на вставку повторяющегося ключа:
const account = await Account.save({
accountIdentifier = token.oid,
name = token.name,
userName = (token as any).preferred_username,
})
return done(null, account, token)
IDE показывает, что обновит или вставит, но не обновляет: введите описание изображения здесь
Как возможно правильно использовать метод save
? Таким образом, он добавляет учетную запись, если она не существует, и / или обновляет учетную запись, когда она уже существует.