Drizzle kit migration doesn't reflect schema's relations

I have two schemas in my application, one for parent courses and another one for child courses; they have a one-to-many relation between each other (one parent course can have multiple child courses). When I run npx drizzle-kit generate:pg I see the output in the CLI stating that non of them have foreign keys and when I check the snapshot I verified that no foreign key is present. My config looks like this:
// drizzle.config.ts
export default {
schema: './src/schemas/*.ts',
driver: 'pg',
out: './drizzle',
dbCredentials: {
connectionString: dbConnectionString,
},
} satisfies Config;
// drizzle.config.ts
export default {
schema: './src/schemas/*.ts',
driver: 'pg',
out: './drizzle',
dbCredentials: {
connectionString: dbConnectionString,
},
} satisfies Config;
And both my schemas and their declared relationships are in ./src/schemas/:
// parentCoursesSchema.ts
import { pgTable, text, varchar, integer } from 'drizzle-orm/pg-core';

const parentCourses = pgTable('parentCourses', {
id: integer('curso parent').primaryKey(),
titulo: varchar('titulo', { length: 255 }),
// rest of the schema
});

export default parentCourses;
// parentCoursesSchema.ts
import { pgTable, text, varchar, integer } from 'drizzle-orm/pg-core';

const parentCourses = pgTable('parentCourses', {
id: integer('curso parent').primaryKey(),
titulo: varchar('titulo', { length: 255 }),
// rest of the schema
});

export default parentCourses;
// coursesSchema.ts
import {
pgTable,
text,
varchar,
integer,
time,
timestamp,
boolean,
} from 'drizzle-orm/pg-core';

const courses = pgTable('courses', {
nombre: varchar('nombre', { length: 255 }).primaryKey(),
cursoParent: integer('curso parent'),
// rest of the schema
});

export default courses;
// coursesSchema.ts
import {
pgTable,
text,
varchar,
integer,
time,
timestamp,
boolean,
} from 'drizzle-orm/pg-core';

const courses = pgTable('courses', {
nombre: varchar('nombre', { length: 255 }).primaryKey(),
cursoParent: integer('curso parent'),
// rest of the schema
});

export default courses;
// coursesRelations.ts
import { relations } from 'drizzle-orm';
import courses from './coursesSchema';
import parentCourses from './parentCoursesSchema';

export const coursesRelations = relations(courses, ({ one }) => ({
parentCourse: one(parentCourses, {
fields: [courses.cursoParent],
references: [parentCourses.id],
}),
}));

export const parentCoursesRelations = relations(parentCourses, ({ many }) => ({
courses: many(courses),
}));
// coursesRelations.ts
import { relations } from 'drizzle-orm';
import courses from './coursesSchema';
import parentCourses from './parentCoursesSchema';

export const coursesRelations = relations(courses, ({ one }) => ({
parentCourse: one(parentCourses, {
fields: [courses.cursoParent],
references: [parentCourses.id],
}),
}));

export const parentCoursesRelations = relations(parentCourses, ({ many }) => ({
courses: many(courses),
}));
Does anyone knows what I'm doing wrong here?
5 Replies
Angelelz
Angelelz13mo ago
The relations don't automatically create foreign keys for you. It's only the way to tell drizzle what your relations look like
Angelelz
Angelelz13mo ago
Drizzle Queries - DrizzleORM
Drizzle ORM is a lightweight and performant TypeScript ORM with developer experience in mind
f2bear
f2bearOP13mo ago
ohhhh I get it so, in order to make a foreign key I must add the .references() into the schema right?
Angelelz
Angelelz13mo ago
yup
f2bear
f2bearOP13mo ago
cool, thanks!
Want results from more Discord servers?
Add your server