【问题标题】:How to query on shared ids tables on sequelize如何在 sequelize 上查询共享 ids 表
【发布时间】:2017-03-12 20:36:19
【问题描述】:

我有 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,所以person主键是User的主键,它没有自增。那么有没有办法在这两个表之间建立连接?我试图做类似的事情:

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

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

【问题讨论】:

    标签: javascript mysql node.js sequelize.js


    【解决方案1】:

    你不能在没有关系的情况下使用包含。您可以使用原始查询来检索信息,例如:

    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);
        }
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-20
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多