Skip to content

Regras de validação

O Lucid adiciona regras de validação ao VineJS para usar em seus esquemas. Por baixo dos panos, ele registra um provedor em seu aplicativo AdonisJS que estende as regras do VineJS. Você pode ler mais nos documentos do AdonisJS e documentos do VineJS.

Você pode usar essas regras diretamente do seu esquema VineJS. Por exemplo, a regra unique:

ts
import vine from '@vinejs/vine'

const schema = vine.object({
  email: vine
    .string()
    .unique({
      table: 'users',
      column: 'email',
    }),
})

Unique

Garanta que o valor seja exclusivo (não exista) dentro de uma determinada tabela e coluna do banco de dados.

NOTA

A regra é uma macro para VineString e VineNumber, então você pode usá-la depois de vine.string() ou vine.number().

Você pode passar um retorno de chamada para consultar o banco de dados diretamente ou um objeto:

callback deve retornar true se o valor for único (não existir) ou false se o valor já existir. objeto de opções para especificar a tabela e a coluna.

ts
// Uso com retorno de chamada
const schema = vine.object({
  email: vine
    .string()
    .unique((db, value) => {
      const row = await db.from('users').where('email', value).first()
      return row === null
    }),
})

// Uso com opções
const schema = vine.object({
  email: vine
    .string()
    .unique({ table: 'users', column: 'email' }),
})

Você também pode usar seu modelo Lucid diretamente dentro do retorno de chamada:

ts
const schema = vine.object({
  email: vine
    .string()
    .unique((_, value) => {
      const row = await User.findBy('email', value)
      return row ? false : true
    }),
})

Exists

Garanta que o valor exista dentro de uma determinada tabela e coluna do banco de dados. Este é o inverso da regra exclusiva.

NOTA

A regra também é uma macro para VineString e VineNumber, então você pode usá-la depois de vine.string() ou vine.number().

Você pode passar um retorno de chamada para consultar o banco de dados diretamente ou um objeto:

ts
// Uso com retorno de chamada
const schema = vine.object({
  slug: vine
    .string()
    .exists((db, value) => {
      const row = await db.from('categories').where('slug', value).first()
      return row ? true : false
    }),
})

// Uso com opções
const schema = vine.object({
  slug: vine
    .string()
    .exists({ table: 'categories', column: 'slug' }),
})