【问题标题】:ExpressJS - Sequelize - Column Missing ErrorExpressJS - Sequelize - 列缺失错误
【发布时间】:2016-01-14 15:44:07
【问题描述】:

除了连接到特定查询的描述之外,我正在尝试正确查询所有符合我的 sequelize 查询的图像,但我收到了一个 createdAt 列的错误,该列不在我的表中。如何指定要在查询中使用的列?

这是查询(图案和颜色已正确拉入查询):

router.get('/:pattern/:color/result', function(req, res){

    console.log(req.params.color);
    console.log(req.params.pattern);

    Images.findAll({ 
        where: {
            pattern: req.params.pattern,
            color: req.params.color
        }
        });
        //console.log(image);
        //console.log(doc.descriptions_id);
        res.render('pages/result.hbs', {
            pattern : req.params.pattern,
            color : req.params.color,
            image : image
        });

});

这是我的桌子:

CREATE TABLE `images` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `pattern` varchar(225) DEFAULT NULL,
  `color` varchar(225) DEFAULT NULL,
  `imageUrl` varchar(225) DEFAULT NULL,
  `imageSource` varchar(225) DEFAULT NULL,
  `description_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `description_id` (`description_id`),
  CONSTRAINT `images_ibfk_1` FOREIGN KEY (`description_id`) REFERENCES `description` (`description_id`)
) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=latin1;

这是错误:

   Executing (default): SELECT `id`, `pattern`, `color`, `imageUrl`, `imageSource`, `description_id`, `createdAt`, `updatedAt` FROM `images` AS `images` WHERE `images`.`pattern` = 'solid' AND `images`.`color` = 'navy-blue';
    Unhandled rejection SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'createdAt' in 'field list'
        at Query.formatError (/Users/user/Desktop/Projects/node/assistant/node_modules/sequelize/lib/dialects/mysql/query.js:160:14)

【问题讨论】:

    标签: mysql express sequelize.js


    【解决方案1】:

    默认情况下,sequelize 假定您的表中有时间戳。这可以全局禁用

    new Sequelize(..., { define: { timestamps: false }});
    

    或每个型号:

    sequelize.define(name, attributes, { timestamps: false });
    

    或者,如果您只有一些时间戳(fx 已更新,但未创建)

    sequelize.define(name, attributes, { createdAt: false });  
    

    如果您的列被称为其他名称:

    sequelize.define(name, attributes, { createdAt: 'make_at' });
    

    http://docs.sequelizejs.com/en/latest/api/sequelize/

    这样,您不必每次都指定所有属性 - sequelize 知道它实际上可以选择哪些属性。

    如果你真的想指定应该选择哪些属性 默认你可以使用范围

    sequelize.define(name, attributes, { defaultScope { attributes: [...] }});
    

    这将应用于每个查找调用

    【讨论】:

      【解决方案2】:

      您可以明确设置要在查询中检索的属性(列名)。例如,如果要检索 idpatterncolorimageUrlimageSource 列,可以使用以下代码:

      Images.findAll({
          where : {
              pattern: req.params.pattern,
              color: req.params.color
          },
          attributes : ['id', 'pattern', 'color', 'imageUrl', 'imageSource']
      })
      

      【讨论】:

        猜你喜欢
        • 2019-02-19
        • 2016-02-13
        • 1970-01-01
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-17
        相关资源
        最近更新 更多