数据库
IndexedDB 的数据库层, 上面有 API 模型 拉威尔的(单位:千美元) DB 类,一个流利的查询构建器,一个在您的应用靴子时运行的图案构建器和前向迁移.
方法名称及其语义学跟随Laravel 足够接近于 Docs 值得同时阅读 文档 链接每个 Laravel 页面。 它不是一个端口:索引DB是一个没有查询语言的密钥值商店,所以行为必须不同的地方会在出现的地方被调出. 这个项目与拉拉维尔项目无关.
目录
安装
您可以通过 npm 安装软件包 :
npm install @bjnstnkvc/db
然后导入到您的工程中
import { DB, Schema, Migration, type Blueprint } from '@bjnstnkvc/db';
该套件支持Chrome 93,Edge 93,Firefox 92和Safari 15.4或更后.
快开始
在模块范围上声明您的连接, 然后当应用靴子时迁移 :
import { DB, Schema, Migration, type Blueprint, type Transaction } from '@bjnstnkvc/db';
interface User {
id: number;
name: string;
email: string;
age: number | null;
role: string;
created_at: Date | null;
updated_at: Date | null;
}
class CreateUsersTable extends Migration {
/**
* Run the migration.
*/
override async up(): Promise<void> {
await Schema.create('users', (table: Blueprint): void => {
table.id();
table.string('name');
table.string('email').unique();
table.integer('age').nullable().index();
table.string('role').default('member').index();
table.timestamps();
});
}
}
DB.configure({
default : 'app',
connections: {
app: {
database : 'app',
migrations: [CreateUsersTable],
},
},
});
await DB.migrate('app');
DB.migrate(name) 是一能的,所以调用它 在每个靴子是预定的用途。 然后查询 :
await DB.table<User>('users').insert({ name: 'John', email: '[email protected]', age: 30 });
const users: User[] = await DB.table<User>('users')
.where('age', '>=', 18)
.whereIn('role', ['admin', 'owner'])
.orderBy('created_at', 'desc')
.limit(10)
.get();
await DB.transaction(async (transaction: Transaction): Promise<void> => {
const id: IDBValidKey = await transaction.table<User>('users').insertGetId({ name: 'Jane', email: '[email protected]' });
await transaction.table('posts').insert({ user_id: id, title: 'Hello' });
});
文档
- 配置: 宣布连接, 迁移在后头, 并解决, 断开和清理连接
- 移徙: 仅前向移徙,移徙可能等待什么 移民状况
- 种子:种子者,他们所写的连接,安全运行在每一个 从头开始重建
- 定义方案: 列类型和修改器,修改和更改列, 重命名和降下列、 降下或重命名同一回调列的索引 声明、 小数、 enums、 已存储的强制行和保留表
- 查询:限制,JSON列,塑造,终端和写作
- 联合内部,左,右和交叉 加入,以及它们的成本
- 分组数字 :
groupBy键入总量和having - 查询计划:限制如何成为一个指数范围,以及
explain() - 交易:交易范围、巢穴和召回可能等待的内容
- 活动:倾听查询、交易、迁移和种子活动,以及 查询日志
- 多个标签: 被屏蔽的升级和数据库被另一个标签所更改
- 储存配额: 配额错误、使用估计和要求不被驱逐
- 例外: 包投出的每一个例外,以及何时
和拉拉维尔不同的地方
- 移徙只是向前发展. 索引DB版本不能减少, 因此没有
down()没有rollback(),迁移只能附加.DB.fresh(name)重新开始. 见 移徙。 。 。 . - 迁移或交易只能等待此套件. IndexedDB 执行交易
{\fn华文楷体\fs16\1che0e0e0}所以等待着 {\fn华文楷体\fs16\1che0e0e0}我需要你帮助
fetch或计时器提前结束, 下一个调用MigrationTransactionClosedException或者说TransactionClosedException。网络数据属于 渗出物。见 移民可能会等待什么 财务报告和审定财务报表 召回会等什么。 。 。 . - Schema 更改只在迁移内运行,因为他们需要更改版本的交易. 读之方能随所出. 见 移民外的Schema。 。 。 .
- 列类型由此软件包在写时执行,因为 IndexedDB 全部存储 对象和检查本身。 见 定义方案。 。 。 .
- 没有
beginTransaction(), (中文(简体) ),commit()或者说rollBack(),在 另一个连接上的运行会加入它,因为索引数据库没有保存点。 见 交易。 。 。 . - 在内存中加入和分组运行,仅通过连接到达基准表,并 集合在打入的对象中命名,而不是原始的SQL. 见 联合 财务报告和审定财务报表 分组。 。 。 .
- 查询最多使用一个索引.
explain()显示哪个。 见 查询计划。 。 。 . - 浏览器添加自己的失败模式: 储存配额、驱逐和持有 数据库打开。 见 储存配额 财务报告和审定财务报表 多个标签。 。 。 .
测试
IndexedDB在节点不存在,所以将测试设置指向
fake-indexeddb数字 :
单位 tests/setup.ts数字 :
import 'fake-indexeddb/auto';
进 vitest.config.ts数字 :
export default defineConfig({
test: {
setupFiles: ['./tests/setup.ts'],
},
});
给每个测试文件自己的数据库名称,这样套件就不会共享状态.