Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sequelize Unknown column 'createdAt' in 'field list'? #21

Open
koala-coding opened this issue Jul 14, 2019 · 0 comments
Open

Sequelize Unknown column 'createdAt' in 'field list'? #21

koala-coding opened this issue Jul 14, 2019 · 0 comments

Comments

@koala-coding
Copy link
Owner

报错:

在使用sequelize创建model后,使用model进行findAll查询的时候报错:

Sequelize Unknown column '*.createdAt' in 'field list'?

报错原因:

在sequelize中启用了时间戳(即sequelize中创建的model开启了时间戳),但是在数据库中的实际表定义不包含时间戳列。

当你做model.findAll时,会将model中的每一进行别名查询(也包括model中开启的时间戳),从而创建下面例子查询,这面就包含了数据库中实际没有的时间戳列(createdAt,updatedAt):

SELECT `users`.*, `userDetails`.`userId` AS `userDetails.userId`,`userDetails`.`firstName` AS `userDetails.firstName`, `userDetails`.`id` AS `userDetails.id`, `userDetails`.`createdAt` AS `userDetails.createdAt`, `userDetails`.`updatedAt` AS `userDetails.updatedAt` FROM `users` LEFT OUTER JOIN `userDetails` AS `userDetails` ON `users`.`id` = `userDetails`.`userId`;

解决办法

在model创建的时候禁用时间戳,例如禁用userDetails模型的时间戳:

var userDetails = sequelize.define('userDetails', {
    userId :Sequelize.INTEGER,
    firstName : Sequelize.STRING,
    lastName : Sequelize.STRING,
    birthday : Sequelize.DATE
}, {
    timestamps: false
});

或在sequelize连接mysql的时候,直接禁用所有时间戳开启:

var sequelize = new Sequelize('sequelize_test', 'root', null, {
    host: "127.0.0.1",
    dialect: 'mysql',
    define: {
        timestamps: false
    }
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant