Lucid ORM
O Lucid é um construtor de consultas SQL e um ORM Active Record construído sobre o Knex criado e mantido pela equipe principal do AdonisJS. O Lucid se esforça para alavancar o SQL em seu potencial máximo e oferece uma API limpa para muitas operações SQL avançadas.
NOTA
A documentação do Lucid está disponível em https://lucid.adonisjs.com
Por que o Lucid
A seguir estão alguns dos recursos selecionados do Lucid.
- Um construtor de consultas fluente construído sobre o Knex.
- Suporte para réplicas de leitura e gravação e gerenciamento de múltiplas conexões.
- Modelos baseados em classes que aderem ao padrão do registro ativo (manipulando relações, serialização e ganchos).
- Sistema de migração para modificar o esquema do banco de dados usando conjuntos de alterações incrementais.
- Fábricas de modelos para gerar dados falsos para teste.
- Semeadores de banco de dados para inserir dados iniciais/fictícios no banco de dados.
Além disso, os seguintes são motivos adicionais para usar o Lucid dentro de um aplicativo AdonisJS.
Nós enviamos integrações de primeira classe para o Lucid com o pacote Auth e validador. Portanto, você não precisa escrever essas integrações sozinho.
O Lucid vem pré-configurado com os kits iniciais
api
eweb
, fornecendo uma vantagem inicial para seus aplicativos.Um dos principais objetivos do Lucid é alavancar o SQL em seu potencial máximo e oferecer suporte a muitas operações SQL avançadas, como funções de janela, CTEs recursivos, operações JSON, bloqueios baseados em linha e muito mais.
Tanto o Lucid quanto o Knex existem há muitos anos. Portanto, eles são maduros e testados em batalha em comparação com muitos outros novos ORMs.
Dito isso, o AdonisJS não força você a usar o Lucid. Basta desinstalar o pacote e instalar o ORM de sua escolha.
Instalação
Instale e configure o Lucid usando o seguinte comando.
node ace add @adonisjs/lucid
Veja as etapas executadas pelo comando configure
- Registra o seguinte provedor de serviços dentro do arquivo
adonisrc.ts
.
{
providers: [
// ...outros provedores
() => import('@adonisjs/lucid/database_provider'),
]
}
- Registre o seguinte comando dentro do arquivo
adonisrc.ts
.
{
commands: [
// ...outros comandos
() => import('@adonisjs/lucid/commands'),
]
}
Crie o arquivo
config/database.ts
.Defina as variáveis de ambiente e suas validações para o dialeto selecionado.
Instale as dependências de peer necessárias.
Criando seu primeiro modelo
Depois que a configuração for concluída, você pode criar seu primeiro modelo usando o seguinte comando.
node ace make:model User
Este comando cria um novo arquivo dentro do diretório app/models
com o seguinte conteúdo.
import { DateTime } from 'luxon'
import { BaseModel, column } from '@adonisjs/lucid/orm'
export default class User extends BaseModel {
@column({ isPrimary: true })
declare id: number
@column.dateTime({ autoCreate: true })
declare createdAt: DateTime
@column.dateTime({ autoCreate: true, autoUpdate: true })
declare updatedAt: DateTime
}
Saiba mais sobre modelos visitando a documentação oficial.
Migrações
As migrações são uma maneira de modificar o esquema e os dados do banco de dados usando conjuntos de alterações incrementais. Você pode criar uma nova migração usando o seguinte comando.
node ace make:migration users
Este comando cria um novo arquivo dentro do diretório database/migrations
com o seguinte conteúdo.
import { BaseSchema } from '@adonisjs/lucid/schema'
export default class extends BaseSchema {
protected tableName = 'users'
async up() {
this.schema.createTable(this.tableName, (table) => {
table.increments('id')
table.timestamp('created_at')
table.timestamp('updated_at')
})
}
async down() {
this.schema.dropTable(this.tableName)
}
}
Você pode executar todas as migrações pendentes usando o seguinte comando.
node ace migration:run
Saiba mais sobre migrações visitando a documentação oficial.
Query Builder
O Lucid vem com um Query Builder fluente criado sobre o Knex. Você pode usar o Query Builder para executar operações CRUD no seu banco de dados.
import db from '@adonisjs/lucid/services/db'
/**
* Cria uma instância do construtor de consultas
*/
const query = db.query()
/**
* Cria uma instância do construtor de consultas e também seleciona
* a tabela
*/
const queryWithTableSelection = db.from('users')
O Query Builder também pode ter como escopo uma instância de modelo.
import User from '#models/user'
const user = await User.query().where('username', 'rlanz').first()
Saiba mais sobre o Query Builder visitando a documentação oficial.
Operações CRUD
Os modelos Lucid têm métodos integrados para executar operações CRUD no banco de dados.
import User from '#models/user'
/**
* Criar um novo usuário
*/
const user = await User.create({
username: 'rlanz',
email: 'romain@adonisjs.com',
})
/**
* Encontre um usuário pela chave primária
*/
const user = await User.find(1)
/**
* Atualizar um usuário
*/
const user = await User.find(1)
user.username = 'romain'
await user.save()
/**
* Excluir um usuário
*/
const user = await User.find(1)
await user.delete()
Saiba mais sobre as operações CRUD visitando a documentação oficial.