orm - Hur man ger en unik begränsning i Lucid-modellen, jag använder Lucid i Adonis med TypeScript


I Adonis.js försöker jag lägga till en unik begränsning på e-postfältet precis som vi gör i Sequelize, PrismaJS eller någon annan ORM. Är det möjligt att lägga till i Adonis?

    import { DateTime } from 'luxon'
    import { BaseModel, column, computed, HasMany, hasMany } from '@ioc:Adonis/Lucid/Orm'
    import Post from 'App/Models/Post'
    
    export default class User extends BaseModel {
      @column({ isPrimary: true })
      public id: number
    
      @column()
      public firstName: string
    
      @column()
      public lastName: string
    
      @column()
      public email: string
    
      @column({ serializeAs: null })
      public password: string
    
      @column.dateTime({ autoCreate: true })
      public createdAt: DateTime
    
      @column.dateTime({ autoCreate: true, autoUpdate: true })
      public updatedAt: DateTime
    
      @computed()
      public get fullName() {
        return `${this.firstName} ${this.lastName}`
      }
      @hasMany(() => Post, {
        foreignKey: 'userId',
      })
      public posts: HasMany<typeof Post>
    }

Svar #1

Jag antar att du vill validera om e-postadressen är unik innan du skapar användaren i databasen. I så fall kan du använda unik validering för att säkerställa att den e-post som användaren anger inte finns i databasen.

import { schema, rules } from '@ioc:Adonis/Core/Validator'
{
  email: schema.string({}, [
    rules.unique({ table: 'users', column: 'email' })
  ])
}

Du kan lära dig mer om Validator och Unique Rule Validation i den officiella Adonis-dokumentationen.