ExpressJS - Sequelize - Column Missing Error

3
我正在尝试正确地查询符合我的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)
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
9

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

new Sequelize(..., { define: { timestamps: false }});
根据模型:
sequelize.define(name, attributes, { timestamps: false });
如果你只有一些时间戳(例如更新时间,但不是创建时间)
sequelize.define(name, attributes, { createdAt: false });  

如果你的列叫做其他名称:

sequelize.define(name, attributes, { createdAt: 'make_at' });
在这种方式下,您不必每次都指定所有属性 - Sequelize知道哪些属性可以实际选择。 如果您真的想指定默认情况下应选择哪些属性,您可以使用范围(scope)。 http://docs.sequelizejs.com/en/latest/api/sequelize/
sequelize.define(name, attributes, { defaultScope { attributes: [...] }});

这将应用于每个查找调用


4

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,