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
returning
para 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)
})