簡體   English   中英

嘗試將數據輸入到未知列中[Sequelize]

[英]Sequelize trying to enter data into an unknown column [Postgres]

這是我的查詢失敗:

Models.OrdersProducts.create({
  orderId: 1,
  productId: 1,
});

與錯誤:

Executing (default): INSERT INTO "OrdersProducts" ("orderId","productId","createdAt","updatedAt","OrderId") VALUES (1,1,'2018-02-25 12:51:00.110 +00:00
','2018-02-25 12:51:00.110 +00:00',NULL) RETURNING *;
Unhandled rejection SequelizeDatabaseError: column "OrderId" of relation "OrdersProducts" does not exist
    at Query.formatError (/Users/aakashverma/Documents/sequelize-join-table/node_modules/sequelize/lib/dialects/postgres/query.js:363:16)

我的表沒有列OrderId (大寫O),只有orderId

注意 :“我的OrdersProducts表中確實有一個id 1的條目,這不是問題。


這是我對OrdersProducts遷移:

module.exports = {
  up: (queryInterface, Sequelize) => queryInterface.createTable('OrdersProducts', {
    id: {
      allowNull: false,
      autoIncrement: true,
      primaryKey: true,
      type: Sequelize.INTEGER,
    },
    orderId: {
      type: Sequelize.INTEGER,
      references: {
        model: 'Orders',
        key: 'id',
      },
    },
    productId: {
      type: Sequelize.INTEGER,
      references: {
        model: 'Products',
        key: 'id',
      },
    },
    createdAt: {
      allowNull: false,
      type: Sequelize.DATE,
    },
    updatedAt: {
      allowNull: false,
      type: Sequelize.DATE,
    },
  }),
  down: (queryInterface, Sequelize) => queryInterface.dropTable('OrdersProducts'),
};

這是模型文件:

models / OrdersProducts.js

module.exports = (sequelize, DataTypes) => {
  const OrdersProducts = sequelize.define('OrdersProducts', {
    orderId: DataTypes.INTEGER,
    productId: DataTypes.INTEGER,
  }, {});
  return OrdersProducts;
};

models / Orders.js

module.exports = (sequelize, DataTypes) => {
  const Orders = sequelize.define('Orders', {
    userId: DataTypes.INTEGER,
  }, {});
  Orders.associate = function (models) {
    Orders.belongsTo(models.Users);
    Orders.belongsToMany(models.Products, { through: 'OrdersProducts', as: 'product' });
  };
  return Orders;
};

models / Products.js

module.exports = (sequelize, DataTypes) => {
  const Products = sequelize.define('Products', {
    name: DataTypes.TEXT,
  }, {});
  Products.associate = function (models) {
    Products.belongsToMany(models.Orders, { through: 'OrdersProducts', as: 'order' });
  };
  return Products;
};

奇怪的。

注意:我在查詢中使用1作為ID,因為這是自動遞增id鍵值,因為我在任何表中僅添加一個條目。

查看我的Orders模型:

module.exports = (sequelize, DataTypes) => {
  const Orders = sequelize.define('Orders', {
    userId: DataTypes.INTEGER,
  }, {});
  Orders.associate = function (models) {
    Orders.belongsTo(models.Users);

Orders.belongsToMany(models.Products,{通過:'OrdersProducts',as:'product'});

  };
 return Orders;
};

和我的Products模型:

module.exports = (sequelize, DataTypes) => {
  const Products = sequelize.define('Products', {
    name: DataTypes.TEXT,
  }, {});
  Products.associate = function (models) {

Products.belongsToMany(models.Orders,{通過:'OrdersProducts',as:'order'});

   };
  return Products;
};

這兩個似乎為 OrdersProducts創建了自己的屬性,例如OrderIdProductId (首字母大寫; 不知道它們為什么以及如何生成名稱 ),因此,我得到了OrderId麻煩。

如果我從Orders模型中刪除belongToMany關聯,那么我會盯着ProductId列獲取相同的錯誤。

最終,我在這里找到了可接受的答案,答案以某種方式告訴我使用關聯提供的列,並將相應的列OrdersProducts列中。

現在我的查詢工作正常,順便說一句 ,看起來像:

const Models = require('./models');

// Models.Users.create({
//   name: 'Aakash',
// });

// Models.Orders.create({
//   userId: 1,
// });

// Models.Products.create({
//   name: 'lash',
// });

Models.OrdersProducts.create({
  OrderId: 1,
  ProductId: 1,
});

和模型看起來像(再次注意大寫字母):

module.exports = (sequelize, DataTypes) => {
  const OrdersProducts = sequelize.define('OrdersProducts', {
    OrderId: DataTypes.INTEGER,
    ProductId: DataTypes.INTEGER,
  }, {});
  return OrdersProducts;
};

關於自動列命名的謎團仍然存在。


PS這是最奇怪的部分。

現在,您可以從上面的代碼中看到一個表Users 注意模型中belongsTo作用。

models / users.js

module.exports = (sequelize, DataTypes) => {
  const Users = sequelize.define('Users', {
    name: DataTypes.STRING,
  }, {});
  Users.associate = function (models) {
    Users.hasMany(models.Orders);
  };
  return Users;
};

models / orders.js

module.exports = (sequelize, DataTypes) => {
  const Orders = sequelize.define('Orders', {
    userId: DataTypes.INTEGER,
  }, {});
  Orders.associate = function (models) {
    Orders.belongsTo(models.Users);
    Orders.belongsToMany(models.Products, { through: 'OrdersProducts', as: 'product' });
  };
  return Orders;
};

下面的查詢仍然有效 ,並向Orders添加了一個條目(看看它既不需要我從Orders表中刪除userId列,又不提供自己的UserId -_-):

Models.Users.create({
  name: 'Aakash',
});
Models.Orders.create({
  userId: 1,
});

models / users.js

module.exports = (sequelize, DataTypes) => {
  const Users = sequelize.define('Users', {
    name: DataTypes.STRING,
  }, {});
  Users.associate = function (models) {
    Users.hasMany(models.Orders);
  };
  return Users;
};

models / orders.js

module.exports = (sequelize, DataTypes) => {
  const Orders = sequelize.define('Orders', {
    userId: DataTypes.INTEGER,
  }, {});
  Orders.associate = function (models) {
    Orders.belongsTo(models.Users);
    Orders.belongsToMany(models.Products, { through: 'OrdersProducts', as: 'product' });
  };
  return Orders;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM