【问题标题】:hasOne association between foreign keyshasOne 外键之间的关联
【发布时间】:2014-02-03 13:28:08
【问题描述】:

我是 ORM 的新手,目前正在使用 Express 了解 Sequelize 中的关联。我现在要处理的问题是 hasOne 和 belongsTo 方法,以及在我的特定情况下应该如何调用和使用它们。

两个表之间有简单的关系

CREATE TABLE rocks(
    rock_id BIGINT 
        NOT NULL AUTO_INCREMENT,
    name varchar(255)
        NOT NULL, 
    rock_mode_id BIGINT
        NOT NULL,   
    PRIMARY KEY (rock_id),
    FOREIGN KEY (rock_mode_id) REFERENCES rock_modes(rock_mode_id),
);

CREATE TABLE rock_modes (
    rock_mode_id BIGINT 
        NOT NULL AUTO_INCREMENT,
    rock_mode varchar(255),
    PRIMARY KEY (rock_mode_id)
);

所以在 javascript 中,我试图在定义模型并将其放置在“db”对象中之后执行此操作:

db.rock.hasOne(db.rock_mode, { foreignKey: 'rock_mode_id' });
db.rock_mode.belongsTo(db.rock, { foreignKey: 'rock_mode_id' });

然后,当我尝试渲染所有数据时:

test: function(req, res) {
    db.rock
    .findAll({include: 
    [{ model: db.rock_mode, on: 'rock_mode_id' }]})
    .success(
        function(rocks) {
            var rockString = "";
            var foundRockMode = "";
            rockString += "<h2>Rocks</h2>";
            for(var i = 0; i < rocks.length;i++){
                rockString += JSON.stringify(rocks[i])+"<br />";

            }
            res.render('test', {
                  title: 'A Page Called Test',
                  body: rockString
            });
        })
  },

当我运行页面时出现错误:

Error: ER_BAD_FIELD_ERROR: Unknown column 'rock_mode.createdAt' in 'field list'

我最终想要做的是能够访问rock_modes 的“名称”字段并将其从岩石对象中打印出来。

【问题讨论】:

    标签: node.js express sequelize.js


    【解决方案1】:

    createdAtupdatedAt 是默认添加到模型和相关表中的字段。在将 sequelize 附加到项目中时,您可以通过常规设置关闭此行为。

    var sequelize = new Sequelize( 'dbname', 'dbuser', 'password', {
                host: 'hostname',
                define: {
                    timestamps: false
                }
            });
    

    这里是这个问题的文档:

    http://sequelizejs.com/docs/latest/models#definition http://sequelizejs.com/docs/latest/models#configuration

    顺便说一句:当您尝试获取具有相关关联(急切加载)的实体时,您不需要指定外键,因为它已经在关联定义中指定。

    【讨论】:

      猜你喜欢
      • 2012-07-18
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多