我有4个共享ID作为主键的表/模型,但是对于示例,我只显示2个

User: {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        allowNull: false
    }
Person: {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        allowNull: false
    },
    name: {
        type: Sequelize.STRING
    }


我正在使用共享ID,因此人员主键是用户的主键,它没有自动增量。那么有没有办法在这两个表之间建立联接?我试图做类似的事情:

getAll(){
    return User.getAll({
        include: [{
            model:Person,
        }]
    })
}


但是由于没有关系,所以它不起作用。我该怎么办?
谢谢

最佳答案

没有关系就不能使用包含。您可以使用原始查询来检索以下信息:

var queryString = 'select * from User u join Person p on u.id = p.id where u.id = :sharedId';

models.sequelize
    .query(queryString, {
      replacements: { shareId: id},
      type: models.sequelize.QueryTypes.SELECT
    })
    .then(function(result) {
      res.json(attendance);
    });


但是随后您将必须执行验证以确保表格正确无误。

但是,我鼓励您实现表之间的关系,因为这样会更易于维护。像这样:

var User  = sequelize.define("User", {
  id: { type: DataTypes.INTEGER, primaryKey: true},
  name: { type: DataTypes.STRING, name: 'name' },
  ...
}, {
  classMethods: {
    associate: function(models) {
      User.hasOne(models.Person);
    }
  }
});

var Person = sequelize.define("Person", {
  id: { type: DataTypes.INTEGER, primaryKey: true},
  name: { type: DataTypes.STRING, name: 'name' },
  ...
}, {
  classMethods: {
    associate: function(models) {
      Person.belogsTo(models.User);
    }
  }
});

09-07 15:50