Mike Stop Continues
Mike Stop Continues
DTDrizzle Team
Created by Mike Stop Continues on 3/8/2025 in #help
[BUG]: Two fails with `There is not enough information to infer relation`
https://github.com/drizzle-team/drizzle-orm/issues/4140 Below is a minimum reproduction. 1/ one-to-many doesn't work when the one() relation uses multiple fields. Below, a unit_packs references three units. The many relationship units.in_packs fails. 2/ one-to-many doesn't work when there are multiple one() relations. Below, unit_links has a unit_left and unit_right relationship. However, both rels fail.
import { relations } from 'drizzle-orm';
import { int, sqliteTable } from 'drizzle-orm/sqlite-core';

export const units = sqliteTable('units', {
id: int().primaryKey(),
});
export const unitsRel = relations(units, ({ many }) => ({
// fails when referencing `one()` with multiple fields
in_packs: many(packs, { relationName: 'all_units' }),

// fails when referencing table with multiple reference fields
link_lefts: many(links, { relationName: 'unit_left' }),
link_rights: many(links, { relationName: 'unit_right' }),
}));

export const packs = sqliteTable('unit_packs', {
id: int().primaryKey(),
unit_1_id: int().notNull().references(() => units.id),
unit_2_id: int().notNull().references(() => units.id),
unit_3_id: int().notNull().references(() => units.id),
});
export const packsRel = relations(packs, ({ one, many }) => ({
all_units: one(units, {
relationName: 'in_packs',
fields: [packs.unit_1_id, packs.unit_2_id, packs.unit_3_id],
references: [units.id, units.id, units.id],
}),
}));

export const links = sqliteTable('unit_links', {
id: int().primaryKey(),
unit_left_id: int().notNull().references(() => units.id),
unit_right_id: int().notNull().references(() => units.id),
});
export const linksRel = relations(links, ({ one }) => ({
unit_left: one(units, {
relationName: 'link_lefts',
fields: [links.unit_right_id],
references: [units.id],
}),
unit_right: one(units, {
relationName: 'link_rights',
fields: [links.unit_left_id],
references: [units.id],
}),
}));
import { relations } from 'drizzle-orm';
import { int, sqliteTable } from 'drizzle-orm/sqlite-core';

export const units = sqliteTable('units', {
id: int().primaryKey(),
});
export const unitsRel = relations(units, ({ many }) => ({
// fails when referencing `one()` with multiple fields
in_packs: many(packs, { relationName: 'all_units' }),

// fails when referencing table with multiple reference fields
link_lefts: many(links, { relationName: 'unit_left' }),
link_rights: many(links, { relationName: 'unit_right' }),
}));

export const packs = sqliteTable('unit_packs', {
id: int().primaryKey(),
unit_1_id: int().notNull().references(() => units.id),
unit_2_id: int().notNull().references(() => units.id),
unit_3_id: int().notNull().references(() => units.id),
});
export const packsRel = relations(packs, ({ one, many }) => ({
all_units: one(units, {
relationName: 'in_packs',
fields: [packs.unit_1_id, packs.unit_2_id, packs.unit_3_id],
references: [units.id, units.id, units.id],
}),
}));

export const links = sqliteTable('unit_links', {
id: int().primaryKey(),
unit_left_id: int().notNull().references(() => units.id),
unit_right_id: int().notNull().references(() => units.id),
});
export const linksRel = relations(links, ({ one }) => ({
unit_left: one(units, {
relationName: 'link_lefts',
fields: [links.unit_right_id],
references: [units.id],
}),
unit_right: one(units, {
relationName: 'link_rights',
fields: [links.unit_left_id],
references: [units.id],
}),
}));
1 replies