关联
一对一
ts
import { integer, pgTable, serial, text } from "drizzle-orm/pg-core";
export const users = pgTable("users", {
id: serial("id").primaryKey(),
name: text("name"),
invitedBy: integer("invited_by"),
});
export const profiles = pgTable("profiles", {
userId: integer("user_id")
.references(() => users.id)
.unique()
.notNull(),
bio: text("bio"),
});或
ts
export const users = pgTable("users", {
id: serial("id").primaryKey(),
name: text("name"),
profileId: integer("profile_id")
.references(() => profiles.id)
.unique(),
});通过 relations 创建关联
ts
export const userRelations = relations(users, ({ one }) => ({
profile: one(profiles, {
fields: [users.id],
references: [profiles.userId],
}),
}));自己关联自己
ts
export const usersRelations = relations(users, ({ one }) => ({
invitee: one(users, {
fields: [users.invitedBy],
references: [users.id],
}),
}));官方示例
ts
import { pgTable, serial, text, integer, jsonb } from "drizzle-orm/pg-core";
import { relations } from "drizzle-orm";
export const users = pgTable("users", {
id: serial("id").primaryKey(),
name: text("name"),
});
export const profileInfo = pgTable("profile_info", {
id: serial("id").primaryKey(),
userId: integer("user_id").references(() => users.id),
metadata: jsonb("metadata"),
});
export const usersRelations = relations(users, ({ one }) => ({
profileInfo: one(profileInfo),
}));
export const profileInfoRelations = relations(profileInfo, ({ one }) => ({
user: one(users, { fields: [profileInfo.userId], references: [users.id] }),
}));