DrizzleORM v0.28.6 发布
Sep 6, 2023
变更
注意: MySQL 的
datetime
现在在mode: 'date'
下会以 UTC 字符串存储日期,并以 UTC 形式检索数据,以符合 MySQL 对datetime
的行为。如果您需要不同的行为并希望以其他方式处理datetime
映射,请使用mode: 'string'
或 自定义类型 实现。
查看 修复 MySQL 的 Datetime 映射 以获取实现细节。
新特性
🎉 LibSQL
批处理 API 支持
批处理 API 使用示例:
const batchResponse = await db.batch([
db.insert(usersTable).values({ id: 1, name: 'John' }).returning({
id: usersTable.id,
}),
db.update(usersTable).set({ name: 'Dan' }).where(eq(usersTable.id, 1)),
db.query.usersTable.findMany({}),
db.select().from(usersTable).where(eq(usersTable.id, 1)),
db.select({ id: usersTable.id, invitedBy: usersTable.invitedBy }).from(
usersTable,
),
]);
type BatchResponse = [
{
id: number;
}[],
ResultSet,
{
id: number;
name: string;
verified: number;
invitedBy: number | null;
}[],
{
id: number;
name: string;
verified: number;
invitedBy: number | null;
}[],
{
id: number;
invitedBy: number | null;
}[],
];
可以在 db.batch
内使用的所有构建器:
`db.all()`,
`db.get()`,
`db.values()`,
`db.run()`,
`db.query.<table>.findMany()`,
`db.query.<table>.findFirst()`,
`db.select()...`,
`db.update()...`,
`db.delete()...`,
`db.insert()...`,
更多使用示例请见:integration-tests/tests/libsql-batch.test.ts 和 docs。
🎉 为 SQLite 中的文本添加 JSON 模式
在 docs 中了解更多信息。
const test = sqliteTable('test', {
dataTyped: text('data_typed', { mode: 'json' }).$type<{ a: 1 }>().notNull(),
});
🎉 在关系查询 API 调用中添加 .toSQL()
const query = db.query.usersTable.findFirst().toSQL();
🎉 为数组添加新的 PostgreSQL 操作符
操作符列表和使用示例
arrayContains
, arrayContained
, arrayOverlaps
在 docs 中了解更多信息。
const contains = await db.select({ id: posts.id }).from(posts)
.where(arrayContains(posts.tags, ['Typescript', 'ORM']));
const contained = await db.select({ id: posts.id }).from(posts)
.where(arrayContained(posts.tags, ['Typescript', 'ORM']));
const overlaps = await db.select({ id: posts.id }).from(posts)
.where(arrayOverlaps(posts.tags, ['Typescript', 'ORM']));
const withSubQuery = await db.select({ id: posts.id }).from(posts)
.where(arrayContains(
posts.tags,
db.select({ tags: posts.tags }).from(posts).where(eq(posts.id, 1)),
));
🎉 为关系查询中的 where 过滤函数添加更多 SQL 操作符
您可以在 docs 中找到更多示例。
// 之前
import { inArray } from "drizzle-orm/pg-core";
await db.users.findFirst({
where: (table, _) => inArray(table.id, [ ... ])
})
// 之后
await db.users.findFirst({
where: (table, { inArray }) => inArray(table.id, [ ... ])
})