Comments (1)
It is a bit embarrassing to solve the issue a few hours after I have created it, but here's the thing I did wrong just in case someone else is having the same problem:
I had to change the related tables in the categoryRelations
and productRelations
from products: many(products)
/categories: many(categories)
to products: many(productCategory)
/categories: many(productCategory)
like so:
schema.ts
Omitted unrelated parts of the file*
//* Products
export const products = pgTable(
"products",
{
id: uuid("id").primaryKey().defaultRandom(),
enabled: boolean("enabled").notNull().default(true),
createdAt: timestamp("created_at")
.notNull()
.default(sql`CURRENT_TIMESTAMP`),
ean: varchar("ean", { length: 128 }).unique().notNull(),
measurement: doublePrecision("measurement").notNull().default(1),
isExactMeasurement: boolean("is_exact_measurement").notNull().default(true),
uom: unitOfMeasurementEnum("uom").notNull().default("pc"),
updatedAt: timestamp("updated_at", {
mode: "date",
precision: 3,
}).$onUpdate(() => new Date()),
},
(table) => ({
enabledIdx: index("product_enabled_idx").on(table.enabled),
eanIdx: index("product_ean_idx").on(table.ean),
measurementIdx: index("product_measurement_idx").on(table.measurement),
uomIdx: index("product_uom_idx").on(table.uom),
isExactMeasurementIdx: index("product_is_exact_measurement_idx").on(
table.isExactMeasurement,
),
}),
);
export const productRelations = relations(products, ({ many }) => ({
categories: many(productCategory), // CHANGED THIS
subNames: many(productSubNames, {
relationName: "product-sub-names",
}),
prices: many(prices, {
relationName: "product-prices",
}),
media: many(media, {
relationName: "product-media",
}),
names: many(productNames, {
relationName: "product-names",
}),
stores: many(stores, {
relationName: "store-products",
}),
}));
//* Product-Category
export const productCategory = pgTable(
"product_category",
{
productId: uuid("product_id")
.notNull()
.references(() => products.id),
categoryId: uuid("category_id")
.notNull()
.references(() => categories.id),
},
(table) => ({
pk: primaryKey({ columns: [table.productId, table.categoryId] }),
}),
);
export const productCategoryRelations = relations(
productCategory,
({ one }) => ({
product: one(products, {
fields: [productCategory.productId],
references: [products.id],
}),
category: one(categories, {
fields: [productCategory.categoryId],
references: [categories.id],
}),
}),
);
//* Categories
export const categories = pgTable(
"categories",
{
id: uuid("id").primaryKey().defaultRandom(),
enabled: boolean("enabled").notNull().default(true),
storeId: uuid("store_id")
.notNull()
.references(() => stores.id),
parentCategoryId: uuid("parent_category_id"),
thumbnailUrl: varchar("thumbnail_url", { length: 256 }),
},
(table) => ({
enabledIdx: index("category_enabled_idx").on(table.enabled),
storeIdx: index("category_store_idx").on(table.storeId),
}),
);
export const categoryRelations = relations(categories, ({ one, many }) => ({
parent: one(categories, {
fields: [categories.parentCategoryId],
references: [categories.id],
relationName: "sub-categories",
}),
subCategories: many(categories, {
relationName: "sub-categories",
}),
names: many(categoryNames, {
relationName: "category-names",
}),
products: many(productCategory), // CHANGED THIS
store: one(stores, {
fields: [categories.storeId],
references: [stores.id],
relationName: "store-categories",
}),
}));
This would've been easily solved if I read the documentation on many-to-many relationships carefully...
from drizzle-orm.
Related Issues (20)
- [BUG]: drizzle-orm dependency missing in drizzle-kit HOT 1
- [FEATURE]: Auto-Alias Columns in Subqueries
- [BUG]: drizzle-kit introspect casing "preserve" config not working HOT 4
- [FEATURE]: add luxon datetime mode to timestamp columns
- [BUG]: string values for limit causes issues but for offset they are ok HOT 1
- [FEATURE]: Join type in query system when foreign key is nullable
- [BUG]: "Offset is outside the bounds of the DataView" when querying PgGeometry field via RQB relation HOT 1
- [BUG]: `drizzle-kit push --force` fails if `__old_push_table` doesn't exist HOT 1
- [BUG]:isNotNull doesn't work with and statement that searches for a varchar with - HOT 1
- [FEATURE]: Ability to get info on migration status & if db can be migrated
- [BUG]: Not inferring types properly with typescript & turborepo HOT 1
- [FEATURE]: sqlx-ts integration for magic sql operator HOT 2
- [BUG]: I get `cannot insert multiple commands into a prepared statement` when migrations more than one HOT 2
- [BUG]: ALTER TABLE Migration Fails to Preserve Default Value for Column
- [BUG]: permission denied for view pg_buffercache HOT 4
- [BUG]:with clouse in query return never
- [FEATURE]: support const enums
- [BUG]: Issue with SQL generation. Trying to reference a type that doesn't exist? HOT 4
- [BUG]: No warning or error when performing a migration with duplicate table columns
- [BUG]: pg geometry is preventing migration
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from drizzle-orm.