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) // truerawQuery
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.isTransactionconnectionName
O nome da conexão para o qual o cliente de consulta foi instanciado
client.connectionNamedebug
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) => {
})