Skip to content

Relations

Relations are pure metadata that reference models by name as strings.

relations: {
role: r.belongsTo("role", { localKey: "roleId" }),
}
relations: {
profile: r.hasOne("profile"),
}
relations: {
posts: r.hasMany("post"),
}
relations: {
roles: r.manyToMany("role", {
through: "user_roles",
localForeignKey: "userId",
foreignForeignKey: "roleId",
}),
}
relations: {
permissions: r.manyToMany("permission", {
through: "user_permissions",
localForeignKey: "userId",
foreignForeignKey: "permissionId",
columns: {
active: t.boolean().default(true),
grantedAt: t.dateTime().autoCreate(),
},
}),
}

Omit options to use naming convention (user_role, userId, roleId):

relations: {
roles: r.manyToMany("role"), // defaults computed at runtime
}
  • Always use strings to reference models
  • Never use cross imports
  • Junction tables are created with ON DELETE CASCADE
  • Relations are used in select as nested objects