Sequelize Associations-Fehler: „Produkt ist nicht mit CartItem verknüpft“, während Beziehungen geladen werden
Posted: 18 Jan 2025, 20:27
Ich arbeite an einem Node.js-Projekt mit Sequelize und es tritt ein Fehler auf, wenn ich versuche, zugehörige Daten mit Eager Loading abzurufen. Hier ist der Fehler:
Hier ist der relevante Teil meines Setups:
Obwohl die Zuordnungen ordnungsgemäß definiert wurden, bleibt der Fehler weiterhin bestehen. Was könnte dieses Problem verursachen und wie kann ich es beheben?
Code: Select all
Error fetching cart items: EagerLoadingError [SequelizeEagerLoadingError]: Product is not associated to CartItem!
CartItem Model
Code: Select all
const { DataTypes } = require("sequelize");
const sequelize = require("../config/database");
const { CART_ITEM_STATUS } = require("../constants");
const CartItem = sequelize.define(
"CartItem",
{
productId: {
type: DataTypes.INTEGER,
references: {
model: "Products",
key: "id",
},
allowNull: false,
},
quantity: {
type: DataTypes.INTEGER,
allowNull: false,
},
purchasePrice: {
type: DataTypes.FLOAT,
defaultValue: 0,
},
status: {
type: DataTypes.ENUM(
CART_ITEM_STATUS.Not_processed,
CART_ITEM_STATUS.Processing,
CART_ITEM_STATUS.Shipped,
CART_ITEM_STATUS.Delivered,
CART_ITEM_STATUS.Cancelled
),
defaultValue: CART_ITEM_STATUS.Not_processed,
},
},
{
tableName: "cart_items",
timestamps: false,
}
);
module.exports = CartItem;
Produktmodell
Code: Select all
const { DataTypes } = require("sequelize");
const sequelize = require("../config/database");
const CartItem = require("./cartitem");
const Product = sequelize.define(
"Product",
{
id: {
type: DataTypes.STRING(64),
primaryKey: true,
defaultValue: () => {
return crypto.createHash("sha256").update(uuidv4()).digest("hex");
},
},
name: {
type: DataTypes.STRING(255),
allowNull: true,
},
},
{
tableName: "products",
timestamps: false,
}
);
Product.hasMany(CartItem, {
foreignKey: "productId",
as: "items",
});
CartItem.belongsTo(Product, {
foreignKey: "productId",
as: "product",
});
module.exports = Product;
Datenbank einrichten
Code: Select all
CartItem.belongsTo(Product, { foreignKey: "productId", as: "product" });
Product.hasMany(CartItem, { foreignKey: "productId", as: "cartItems" });
await sequelize.sync({ alter: true });
Abfrage
Code: Select all
const cartItems = await CartItem.findAll({
include: [{ model: Product, as: "product" }],
});