0

我正在使用 AdonisJS 和 PostgreSQL 构建一个 API。

我的一些实体有可选字段。例如:用户可能有也可能没有电话号码。

我无法确定使用 TypeScript 清除可选字段值(例如在数据库中将电话字段设置为 null)的最佳和最可接受的方法。

我相信正确的方法是在类中将该字段标记为可选并将其设置为未定义,但这没有效果。我可以(并且目前)将该字段标记为可为空,但我认为这不是最佳做法。

这是迁移文件(简化):

export default class Users extends BaseSchema {
  protected tableName = 'users'

  public async up() {
    this.schema.createTable(this.tableName, (table) => {
      table.string('phone', 11).unique()
    })
  }
}

如果我在模型类中将电话字段标记为可选(简化):

export default class User extends BaseModel {
  @column()
  public phone?: string
}

并尝试在保存之前将该字段设置为未定义,没有任何反应:

const user = new User()
user.phone = '12345678910'
await user.save()

user.phone = undefined
await user.save()
// user phone is still '12345678910' in the database

所以,我正在这样做:

export default class User extends BaseModel {
  @column()
  public phone: string | null
}

const user = new User()
user.phone = '12345678910'
await user.save()

user.phone = null
await user.save()
// user phone is now null in the database, as intended

AdonisJS / Lucid 文档没有说明在数据库中将可选字段设置为 null 的最佳方法(根据框架)。有谁知道怎么做?

4

0 回答 0