Inserir construtor de consulta
O construtor de consulta de inserção permite que você insira novas linhas no banco de dados. Você deve usar o select query builder para selecionar, excluir ou atualizar linhas.
Você pode obter acesso ao construtor de consulta de inserção conforme mostrado no exemplo a seguir:
import db from '@adonisjs/lucid/services/db'
db.insertQuery()
// selecionar tabela também retorna uma instância do construtor de consultas
db.table('users')Métodos/Propriedades
A seguir está a lista de métodos e propriedades disponíveis na classe do construtor de consulta de inserção.
insert
O método insert aceita um objeto de par chave-valor para inserir.
O valor de retorno da consulta de inserção é altamente dependente do driver subjacente.
- O MySQL retorna o id da última linha inserida.
- O SQLite retorna o id da última linha inserida.
- Para PostgreSQL, MSSQL e Oracle, você deve usar o método
returningpara buscar o valor do id.
db
.table('users')
.returning('id')
.insert({
username: 'virk',
email: 'virk@adonisjs.com',
password: 'secret',
})multiInsert
O método multiInsert aceita uma matriz de objetos e insere várias linhas de uma vez.
db
.table('users')
.multiInsert([
{
username: 'virk',
email: 'virk@adonisjs.com',
password: 'secret',
},
{
username: 'romain',
email: 'romain@adonisjs.com',
password: 'secret',
}
])
/**
INSERT INTO "users"
("email", "password", "username")
values
('virk@adonisjs.com', 'secret', 'virk'),
('romain@adonisjs.com', 'secret', 'romain')
*/returning
Você pode usar o método returning com bancos de dados PostgreSQL, MSSQL e Oracle para recuperar valores de uma ou mais colunas.
const rows = db
.table('users')
.returning(['id', 'username'])
.insert({
username: 'virk',
email: 'virk@adonisjs.com',
password: 'secret',
})
console.log(rows[0].id, rows[0].username)debug
O método debug permite habilitar ou desabilitar a depuração em um nível de consulta individual. Aqui está um guia completo sobre consultas de depuração.
const rows = db
.table('users')
.debug(true)
.insert({
username: 'virk',
email: 'virk@adonisjs.com',
password: 'secret',
})timeout
Defina o timeout para a consulta. Uma exceção é gerada após o tempo limite ter sido excedido.
O valor do tempo limite é sempre em milissegundos.
db
.table('users')
.timeout(2000)
.insert({
username: 'virk',
email: 'virk@adonisjs.com',
password: 'secret',
})Você também pode cancelar a consulta ao usar tempos limite com MySQL e PostgreSQL.
db
.table('users')
.timeout(2000, { cancel: true })
.insert({
username: 'virk',
email: 'virk@adonisjs.com',
password: 'secret',
})toSQL
O método toSQL retorna o SQL da consulta e as ligações como um objeto.
const output = db
.table('users')
.insert({
username: 'virk',
email: 'virk@adonisjs.com',
password: 'secret',
})
.toSQL()
console.log(output)O objeto toSQL também tem o método toNative para formatar a consulta SQL de acordo com o dialeto do banco de dados em uso.
const output = db
.table('users')
.insert({
username: 'virk',
email: 'virk@adonisjs.com',
password: 'secret',
})
.toSQL()
.toNative()
console.log(output)toQuery
Retorna a consulta SQL como uma string com ligações aplicadas aos espaços reservados.
const output = db
.table('users')
.insert({
username: 'virk',
email: 'virk@adonisjs.com',
password: 'secret',
})
.toQuery()
console.log(output)
/**
INSERT INTO "users"
("email", "password", "username")
values
('virk@adonisjs.com', 'secret', 'virk')
*/Propriedades e métodos úteis
A seguir está a lista de propriedades e métodos que você pode precisar ocasionalmente ao construir algo em cima do construtor de consultas.
client
Referência à instância do cliente de consulta de banco de dados subjacente.
const query = db.insertQuery()
console.log(query.client)knexQuery
Referência à instância da consulta KnexJS subjacente.
const query = db.insertQuery()
console.log(query.knexQuery)reporterData
O construtor de consultas emite o evento db:query e relata o tempo de execução da consulta com o profiler do framework.
Usando o método reporterData, você pode passar detalhes adicionais para o evento e o profiler.
const query = db.table('users')
await query
.reporterData({ userId: auth.user.id })
.insert({
username: 'virk',
email: 'virk@adonisjs.com',
password: 'secret',
})Dentro do evento db:query, você pode acessar o valor de userId da seguinte forma.
import emitter from '@adonisjs/lucid/services/emitter'
emitter.on('db:query', (query) => {
console.log(query.userId)
})