Skip to content

关联

一对一

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] }),
}));