Cliente de consulta
O cliente de consulta funciona como uma ponte entre a conexão e o construtor de consultas para executar as consultas do banco de dados. Além disso, ele expõe as APIs necessárias usadas pelo construtor de consultas para direcionar consultas de leitura para a réplica de leitura e grava a réplica de gravação.
Você pode acessar o cliente de consulta da seguinte forma:
import Database from '@ioc:Adonis/Lucid/Database'
// retorna o cliente para a conexão padrão
const client = Database.connection()
// retorna o cliente para uma conexão nomeada
const pgClient = Database.connection('pg')
Métodos/Propriedades
A seguir está a lista de métodos e propriedades disponíveis na classe do cliente de consulta.
query
Retorna uma instância do query builder para uma conexão de banco de dados pré-selecionada.
client.query()
Você também pode usar o alias from
para instanciar uma nova instância de consulta e selecionar a tabela.
client.from('users')
insertQuery
Retorna uma instância do insert query builder para uma conexão de banco de dados pré-selecionada.
client.insertQuery()
Você também pode usar o alias table
para instanciar uma nova instância de consulta e selecionar a tabela.
client.table('users')
modelQuery
Retorna uma instância do model query builder para um determinado modelo Lucid.
import User from 'App/Models/User'
const query = client.modelQuery(User)
const user = await query.first()
console.log(user instanceof User) // true
rawQuery
Retorna uma instância do raw query builder para uma conexão de banco de dados pré-selecionada.
await client
.rawQuery('select * from users where id = ?', [1])
knexQuery
Retorna uma instância do Knex.js query builder para uma conexão de banco de dados pré-selecionada.
client.knexQuery().select('*')
knexRawQuery
Retorna uma instância do Knex.js raw query builder para uma conexão de banco de dados pré-selecionada.
client
.knexRawQuery('select * from users where id = ?', [1])
transaction
Cria uma nova instância de cliente de transação. O cliente de transação reserva uma conexão de banco de dados dedicada imediatamente e, portanto, é muito importante confirmar ou reverter as transações corretamente.
const trx = await client.transaction()
await trx.insertQuery().table('users').insert()
await trx.commit()
getAllTables
Retorna uma matriz de todas as tabelas do banco de dados.
const tables = await client.getAllTables()
console.log(tables)
getAllViews
Retorna uma matriz de todas as visualizações do banco de dados.
const views = await client.getAllViews()
console.log(views)
getAllTypes
Retorna uma matriz de todos os tipos personalizados do banco de dados. O método funciona apenas com Postgres e Redshift.
const types = await client.getAllTypes()
console.log(types)
columnsInfo
Retorna um par de colunas chave-valor em uma determinada tabela do banco de dados.
const columns = await client.columnsInfo('users')
console.log(columns)
dropAllTables
Remove todas as tabelas dentro do banco de dados.
await client.dropAllTables()
// especifica esquemas (para Postgres e Redshift)
await client.dropAllTables(['public'])
dropAllViews
Remove todas as visualizações dentro do banco de dados.
await client.dropAllViews()
// especifica esquemas (para Postgres e Redshift)
await client.dropAllViews(['public'])
dropAllTypes
Remove todos os tipos personalizados dentro do banco de dados. O método funciona apenas com Postgres e Redshift.
await client.dropAllTypes()
truncate
Trunca uma tabela de banco de dados. Opcionalmente, você também pode cascatear referências de chave estrangeira.
await client.truncate('users')
// cascata
await client.truncate('users', true)
getReadClient
Retorna a instância Knex.js para a réplica de leitura. O cliente de gravação é retornado quando não se usa réplicas de leitura/gravação.
const knex = client.getReadClient()
getWriteClient
Retorna a instância Knex.js para a réplica de gravação. Uma exceção é gerada quando o cliente é instanciado no modo de leitura.
const knex = client.getWriteClient()
getAdvisoryLock
Chamar getAdvisoryLock
obtém um bloqueio consultivo em bancos de dados PostgreSQL e MySQL.
NOTA
Bloqueios consultivos são usados por migrações de banco de dados para evitar que vários processos migrem o banco de dados ao mesmo tempo.
await client.getAdvisoryLock('key_name')
// tempo limite personalizado
await client.getAdvisoryLock('key_name', 2000)
releaseAdvisoryLock
Libera o bloqueio consultivo adquirido anteriormente
await client.releaseAdvisoryLock('key_name')
raw
Cria uma instância de consulta de referência bruta. As consultas geradas usando o método raw
só podem ser usadas como referência em outras consultas e não podem ser executadas de forma independente.
await client.from(
client.raw('select ip_address from user_logins')
)
mode
Uma propriedade somente leitura para saber o modo em que a instância do cliente foi criada. É sempre um dos seguintes
dual
: Ambas as consultas de leitura/gravação são suportadas e serão direcionadas para a réplica correta.write
: As consultas de leitura também serão enviadas para a réplicawrite
.read
: Nenhuma consulta de gravação pode ser executada.
console.log(client.mode)
dialect
Referência ao dialeto do banco de dados subjacente. Cada driver de banco de dados suportado tem seu próprio dialeto.
console.log(client.dialect.name)
isTransaction
Descubra se o cliente é um cliente de transação. O valor é sempre false
para o cliente de consulta.
client.isTransaction
connectionName
O nome da conexão para o qual o cliente de consulta foi instanciado
client.connectionName
debug
Defina o valor como true
para habilitar a depuração para consultas executadas pelo cliente de consulta.
client.debug = true
await client.from('users').select('*')
schema
Retorna referência ao construtor de esquema. O client.schema
é um getter que retorna uma nova instância toda vez que você acessa a propriedade
await client.schema.createTable('users', (table) => {
})