例如,我有一个非常简单的模型:
const Blog = sequelize.define(
'Blog',
{
id: {
type: DataTypes.STRING,
primaryKey: true,
allowNull: false,
get() {
return this.getDataValue('id').toString();
}
},
},
)
我想将我的记录作为字符串返回 id,但它不起作用:const blogs = Blog.findAll({ raw: true })
console.log(blogs)
返回带有 id 属性作为数字的博客列表。任何想法为什么,如果这不是正确的方法,那会是什么?
最佳答案
如果您想为主键使用不同的类型,请确保设置 autoIncrement: false
。通常,您将使用 DataTypes.INTEGER
或 DataTypes.UUID
作为主键类型,但也应使用 DataTypes.String
。您需要为每一行插入一个唯一值。
如果要运行 getter,则需要删除 raw: true
。当您指定原始结果时,从数据库返回的列将直接映射到 JSON 对象,在这种情况下它们是数字。如果您想将结果映射回普通 JSON 对象而不是模型实例,您可以使用 Array.map()
和 Instance.toJSON()
。
请注意,在您的示例中,您还省略了 await
或 thenable 语法,这是异步获取结果所必需的。
const blogs = await Blog.findAll();
const plainObjs = blogs.map((blog) => blog.toJSON());
关于node.js - 如何让 sequelize getter 与 findAll 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64266544/