查询代理器

未匹配的标注

查询客户端连接查询构建器 之间沟通以执行数据库查询。 此外,它还公开了查询构建器用于将读取查询定向到只读副本并写入写入副本所需的 API。

你可以通过以下方式访问查询客户端:

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

// 返回默认连接的客户端
const client = Database.connection()

// 返回一个命名连接的客户端
const pgClient = Database.connection('pg')

方法/属性

以下是查询客户端类上可用的方法和属性的列表。

查询

为预选的数据库连接返回 查询构建器 的实例。

client.query()

你还可以使用 from 别名来实例化一个新的查询实例并选择表。

client.from('users')

insertQuery

为预选的数据库连接返回 插入查询构建器 的实例。

client.insertQuery()

你还可以使用 table 别名来实例化一个新的查询实例并选择表。

client.table('users')

modelQuery

返回给定 Lucid 模型的 模型查询构建器 的实例。

import User from 'App/Models/User'

const query = client.modelQuery(User)

const user = await query.first()
console.log(user instanceof User) // true

rawQuery

为预选的数据库连接返回 原始查询构建器 的实例。

await client
  .rawQuery('select * from users where id = ?', [1])

knexQuery

为预选的数据库连接返回 Knex.js 查询构建器 的实例。

client.knexQuery().select('*')

knexRawQuery

为预选的数据库连接返回 Knex.js 原始查询构建器 的实例。

client
  .knexRawQuery('select * from users where id = ?', [1])

transaction

创建一个新的 事务客户端 实例。 事务客户端立即保留一个专用数据库连接,因此正确提交或回滚事务非常重要。

const trx = await client.transaction()
await trx.insertQuery().table('users').insert()

await trx.commit()

getAllTables

返回所有数据库表的数组。

const tables = await client.getAllTables()
console.log(tables)

getAllViews

返回所有数据库视图的数组。

const views = await client.getAllViews()
console.log(views)

getAllTypes

返回所有数据库自定义类型的数组。 该方法仅适用于 Postgres 和 Redshift

const types = await client.getAllTypes()
console.log(types)

columnsInfo

返回给定数据库表中的列键值对。

const columns = await client.columnsInfo('users')
console.log(columns)

dropAllTables

删除数据库中的所有表。

await client.dropAllTables()

// 指定模式(用于 Postgres 和 Redshift)
await client.dropAllTables(['public'])

dropAllViews

删除数据库中的所有视图。

await client.dropAllViews()

// 指定模式(用于 Postgres 和 Redshift)
await client.dropAllViews(['public'])

dropAllTypes

删除数据库中的所有自定义类型。 该方法仅适用于 Postgres 和 Redshift

await client.dropAllTypes()

truncate

截断数据库表。 或者,你还可以级联外键引用。

await client.truncate('users')

// 级联
await client.truncate('users', true)

getReadClient

返回只读副本的 Knex.js 实例。 不使用读/写副本时返回写客户端。

const knex = client.getReadClient()

getWriteClient

返回写入副本的 Knex.js 实例。 在读取模式下实例化客户端时会引发异常。

const knex = client.getWriteClient()

getAdvisoryLock

调用 getAdvisoryLock 会在 PostgreSQLMySQL 数据库中获得咨询锁。

数据库迁移使用咨询锁来防止多个进程同时迁移数据库。

await client.getAdvisoryLock('key_name')

// 自定义超时
await client.getAdvisoryLock('key_name', 2000)

releaseAdvisoryLock

释放先前获得的咨询锁

await client.releaseAdvisoryLock('key_name')

raw

创建一个原始引用查询实例。 使用 raw 方法生成的查询只能作为其他查询的参考,不能独立执行。

await client.from(
  client.raw('select ip_address from user_logins')
)

mode

一个只读属性,用于了解创建客户端实例的模式。 它始终是以下之一

  • dual:支持读/写查询,并将被定向到正确的副本。
  • write:读查询也将被发送到 write 副本。
  • read:不能执行写查询。
console.log(client.mode)

dialect

参考底层数据库方言。 每个受支持的数据库驱动程序都有自己的方言。

console.log(client.dialect.name)

isTransaction

查找客户端是否为事务客户端。 对于查询客户端,该值始终为“false”。

client.isTransaction

connectionName

为其实例化查询客户端的连接名称

client.connectionName

debug

将值设置为 true 以启用查询客户端执行的查询的调试。

client.debug = true

await client.from('users').select('*')

schema

返回对 schema builder 的引用。 client.schema 是一个 getter,每次访问该属性时都会返回一个新实例

await client.schema.createTable('users', (table) => {
})

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

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

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

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

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 查看所有版本


暂无话题~