Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript sequelize关联-订单未与用户关联_Javascript_Express_Sequelize.js - Fatal编程技术网

Javascript sequelize关联-订单未与用户关联

Javascript sequelize关联-订单未与用户关联,javascript,express,sequelize.js,Javascript,Express,Sequelize.js,在购物车管理系统中, 用户拥有多个订单和一个属于用户的订单,在这种情况下,用户ID(“用户”表的PK)在“订单”表中是FK。 我尝试过这个,但这会导致关联错误,即订单未关联到用户 db.user.findAll({ include: [ { model: db.order } ] }) .then(users => { res.json(users) }); 以下是模型:- 订单:- 'use st

在购物车管理系统中, 用户拥有多个订单和一个属于用户的订单,在这种情况下,用户ID(“用户”表的PK)在“订单”表中是FK。 我尝试过这个,但这会导致关联错误,即订单未关联到用户

 db.user.findAll({
    include: [
      {
        model: db.order
      }
    ]
  })
    .then(users => {
      res.json(users)
    });
以下是模型:-

订单:-

'use strict';
var db = require('../models/index');

module.exports = function (sequelize, DataTypes) {
  var order = sequelize.define('order', {
    id: {
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    userId: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    totalAmount: {
      type: DataTypes.INTEGER,
      allowNull: false
    }
    ,
    createdAt: {
      type: DataTypes.DATE,
      allowNull: true
    },
    updatedAt: {
      type: DataTypes.DATE,
      allowNull: true
    }
  }, {
      classMethods: {
        associate: function (models) {
          order.belongsTo(models.user);
          order.belongsToMany(models.products, { through: { model: models.orderProduct } });
          // order.hasMany(models.orderProduct);
        }
      }
    });
  return order;
};
用户:-

'use strict';
var db = require('../models/index');

module.exports = function (sequelize, DataTypes) {

  var user = sequelize.define('user', {
    id: {
      type: DataTypes.INTEGER(11),
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    name: {
      type: DataTypes.STRING(255),
      allowNull: false
    },
    email: {
      type: DataTypes.STRING(255),
      allowNull: false
    },
    password: {
      type: DataTypes.STRING(255),
      allowNull: false
    },
    address: {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    contact: {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    type: {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    createdAt: {
      type: DataTypes.DATE,
      allowNull: true
    },
    updatedAt: {
      type: DataTypes.DATE,
      allowNull: true
    },
  }, {
      activated: {
        type: DataTypes.BOOLEAN,
        allowNull: true
      }
    }, {
      classMethods: {
        associate: function (models) {
          user.hasMany(models.order);
        }
      }
    });
  return user;
};
以下是错误:-

Unhandled rejection Error: order is not associated to user!
    at Model.validateIncludedElement (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:558:11)
    at F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:440:29
    at Array.map (native)
    at Model.validateIncludedElements (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:436:37)
    at Model.<anonymous> (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:1372:32)
    at Model.tryCatcher (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\util.js:16:23)
    at Promise._settlePromiseFromHandler (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:512:31)
    at Promise._settlePromise (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:569:18)
    at Promise._settlePromise0 (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:614:10)
    at Promise._settlePromises (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:693:18)
    at Async._drainQueue (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\async.js:133:16)
    at Async._drainQueues (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\async.js:143:10)
    at Immediate.Async.drainQueues (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\async.js:17:14)
    at runCallback (timers.js:666:20)
    at tryOnImmediate (timers.js:639:5)
    at processImmediate [as _immediateCallback] (timers.js:611:5)
未处理的拒绝错误:订单未与用户关联!
在Model.validateincludeelement(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\sequelize\lib\Model.js:558:11)
位于F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\sequelize\lib\model.js:440:29
at Array.map(本机)
在Model.validateincludeelements(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\sequelize\lib\Model.js:436:37)
在模型上。(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\sequelize\lib\model.js:1372:32)
在Model.tryCatcher(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\bluebird\js\release\util.js:16:23)
在Promise.\u settlePromiseFromHandler(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\bluebird\js\release\Promise.js:512:31)
在Promise.\u结算Promise(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\bluebird\js\release\Promise.js:569:18)
在Promise.\u settlePromise0(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\bluebird\js\release\Promise.js:614:10)
在Promise.\u结算项目(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\bluebird\js\release\Promise.js:693:18)
异步绘制队列(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\bluebird\js\release\Async.js:133:16)
异步绘制队列(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\bluebird\js\release\Async.js:143:10)
位于Immediate.Async.drainQueues(F:\UNI\BSCS-VII\IAD\WebProjects\Project\SERVER\node\u modules\bluebird\js\release\Async.js:17:14)
运行回调时(timers.js:666:20)
在tryOnImmediate(timers.js:639:5)
在processImmediate[as_immediateCallback](timers.js:611:5)

指定外键。你使用的那些钥匙不会自动推断出来

order.belongsTo(models.user, {foreignKey: 'userID'});
..
user.hasMany(models.order, {foreignKey: 'userID'});
编辑:我重新检查了你的帖子,你的用户定义错误。最后一个“激活”字段位于外部,关闭上一个对象。这就是为什么它没有阅读你的协会

    updatedAt: {
      type: DataTypes.DATE,
      allowNull: true
    },
  }, {
      activated: {
        type: DataTypes.BOOLEAN,
        allowNull: true
      }
    }, {
      classMethods: {
        associate: function (models) {
          user.hasMany(models.order);
        }
      }
    });
应该是:

        updatedAt: {
          type: DataTypes.DATE,
          allowNull: true
        },
        activated: {
            type: DataTypes.BOOLEAN,
            allowNull: true
          }
      }, {
          classMethods: {
            associate: function (models) {
              user.hasMany(models.order);
            }
          }
        });
试试这个。 修改您的关联,如下所示:

order.belongsTo(models.user, {as : 'User'});

user.hasMany(models.order, {as : 'Orders'});
查询时:

db.user.findAll({
include: [{model: db.order, as: 'Orders'}]
})
.then(users => {
  res.json(users)
});

检查我的编辑。您在定义结构中有一个错误问题出现在my user.js(activated属性)中,谢谢:)