插入查询构建器

未匹配的标注

插入查询构建器允许您将新行插入数据库。你必须使用 标准查询生成器选择删除更新行。

你可以访问插入查询构建器,如以下示例所示:

import Database from '@ioc:Adonis/Lucid/Database'

Database.insertQuery()

// 选择表还返回查询生成器的实例
Database.table('users')

方法/属性

以下是插入查询构建器类中可用的方法和属性列表。

insert

insert 方法接受要插入的键值对对象。

插入查询的返回值高度依赖于底层驱动程序。

  • MySQL 返回最后插入的行的 id。
  • SQLite 返回最后插入行的 id。
  • 对于 PostgreSQL、MSSQL 和 Oracle,你必须使用 returning 方法来获取 id 的值。
Database
  .table('users')
  .returning('id')
  .insert({
    username: 'virk',
    email: 'virk@adonisjs.com',
    password: await Hash.make('secret'),
  })

multiInsert

multiInsert 方法接受一个对象数组并一次插入多行。

Database
  .table('users')
  .multiInsert([
    {
      username: 'virk',
      email: 'virk@adonisjs.com',
      password: await Hash.make('secret'),
    },
    {
      username: 'romain',
      email: 'romain@adonisjs.com',
      password: await Hash.make('secret'),
    }
  ])

/**
INSERT INTO "users"
  ("email", "password", "username")
values
  ('virk@adonisjs.com', '$argon2id...', 'virk'),
  ('romain@adonisjs.com', '$argon2id...', 'romain')
*/

returning

你可以对 PostgreSQL、MSSQL 和 Oracle 数据库使用 returning 方法来检索一个或多个列的值。

const rows = Database
  .table('users')
  .returning(['id', 'username'])
  .insert({
    username: 'virk',
    email: 'virk@adonisjs.com',
    password: await Hash.make('secret'),
  })

console.log(rows[0].id, rows[0].username)

debug

debug 方法允许在单个查询级别启用或禁用调试。这是关于调试查询的完整指南

const rows = Database
  .table('users')
  .debug(true) // 👈
  .insert({
    username: 'virk',
    email: 'virk@adonisjs.com',
    password: await Hash.make('secret'),
  })

timeout

为查询定义超时。超过超时后引发异常。

timeout 的值始终以毫秒为单位。

Database
  .table('users')
  .timeout(2000) // 👈
  .insert({
    username: 'virk',
    email: 'virk@adonisjs.com',
    password: await Hash.make('secret'),
  })

你还可以在 MySQL 和 PostgreSQL 使用超时时取消查询。

Database
  .table('users')
  .timeout(2000, { cancel: true })
  .insert({
    username: 'virk',
    email: 'virk@adonisjs.com',
    password: await Hash.make('secret'),
  })

toSQL

toSQL 方法将查询 SQL 和绑定作为对象返回。

const output = Database
  .table('users')
  .insert({
    username: 'virk',
    email: 'virk@adonisjs.com',
    password: await Hash.make('secret'),
  })
  .toSQL() // 👈

console.log(output)

toSQL 对象还具有 toNative 方法来根据使用的数据库方言格式化 SQL 查询。

const output = Database
  .table('users')
  .insert({
    username: 'virk',
    email: 'virk@adonisjs.com',
    password: await Hash.make('secret'),
  })
  .toSQL()
  .toNative()

console.log(output)

toQuery

将 SQL 查询作为字符串返回,并将绑定应用于占位符。

const output = Database
  .table('users')
  .insert({
    username: 'virk',
    email: 'virk@adonisjs.com',
    password: await Hash.make('secret'),
  })
  .toQuery()

console.log(output)
/**
INSERT INTO "users"
  ("email", "password", "username")
values
  ('virk@adonisjs.com', '$argon2id...', 'virk')
*/

useTransaction

useTransaction 方法指示查询构建器将查询包装在事务中。 数据库事务 指南涵盖了在应用程序中创建和使用事务的不同方法。

const trx = await Database.transaction()

await Database
  .table('users')
  .useTransaction(trx) // 👈
  .insert({
    username: 'virk',
    email: 'virk@adonisjs.com',
    password: await Hash.make('secret'),
  })

await trx.commit()

有用的属性和方法

以下是在查询构建器之上构建某些内容时可能偶尔需要的属性和方法列表。

client

参考底层数据库查询客户端的实例。

const query = Database.insertQuery()
console.log(query.client)

knexQuery

对底层 KnexJS 查询实例的引用。

const query = Database.insertQuery()
console.log(query.knexQuery)

reporterData

查询构建器发出 db:query 事件并使用框架分析器报告查询的执行时间。

使用 reporterData 方法,你可以将其他详细信息传递给事件和分析器。

const query = Database.table('users')

await query
  .reporterData({ userId: auth.user.id })
  .insert({
    username: 'virk',
    email: 'virk@adonisjs.com',
    password: await Hash.make('secret'),
  })

db:query 事件中,你可以访问 userId 的值,如下所示。

Event.on('db:query', (query) => {
  console.log(query.userId)
})

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/adonisjs-ref/ch...

译文地址:https://learnku.com/docs/adonisjs-ref/ch...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~