exists
Consulta o banco de dados para garantir que o valor exista dentro de uma determinada tabela e coluna do banco de dados.
NOTA
A regra de validação é adicionada pelo pacote @adonisjs/lucid
. Portanto, certifique-se de que ele esteja instalado e configurado, antes de usar esta regra.
import { schema, rules } from '@ioc:Adonis/Core/Validator'
{
slug: schema.string([
rules.exists({ table: 'categories', column: 'slug' })
])
}
Insensibilidade a maiúsculas e minúsculas
Muitos bancos de dados realizam consultas que diferenciam maiúsculas de minúsculas. Portanto, você pode transformar o valor para lowerCase
em JavaScript ou usar a opção caseInsensitive
para converter o valor para minúsculas durante a consulta.
{
username: schema.string([
rules.exists({
table: 'users',
column: 'username',
caseInsensitive: true,
})
])
}
A seguir está um exemplo da consulta executada nos bastidores.
SELECT username FROM users WHERE LOWER(username) = LOWER(?)
Restrições adicionais
Além disso, você também pode definir as restrições where
e whereNot
como um objeto de par chave-valor. A key
é o nome da coluna.
{
slug: schema.string([
rules.exists({
table: 'categories',
column: 'slug',
where: {
tenant_id: 1,
status: 'active',
},
})
])
}
SELECT slug FROM categories
WHERE slug = ?
AND tenant_id = ?
AND status = ?
Realizamos uma consulta whereIn
se o valor for um array. Por exemplo:
rules.exists({
table: 'categories',
column: 'slug',
where: {
group_id: [1, 2, 4],
},
})
SELECT slug FROM categories
WHERE slug = ?
AND group_id IN (?, ?, ?)
Usando refs
Se você estiver armazenando em cache seu esquema de validação usando cacheKey
e suas restrições where dependerem de um valor de tempo de execução, você deverá usar refs.
import { schema } from '@ioc:Adonis/Core/Validator'
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
export default class CreateUserValidator {
constructor (protected ctx: HttpContextContract) {
}
public refs = schema.refs({
tenantId: this.ctx.auth.user!.tenantId
})
public schema = schema.create({
username: schema.string([
rules.exists({
table: 'users',
column: 'username',
where: { tenant_id: this.refs.tenantId },
})
])
})
}